2012-07-13 42 views
0

我正在学习java,并且已经涉及到泛型和原始类型的主题。我发现我在Java中使用了一些通用的库类(以前不知道),并且我一直在使用它们,就好像它们只是普通的类(声明它们像普通对象一样)。这是否会导致原始类型?既然原始类型被说成是可以避免的,那么在使用Java的任何库类或接口之前,我应该确定它们是否是泛型的?如果一个类是泛型的,那么就用它来表示(参数化类型)?使用库泛型类而不使用其泛型特性将使其为原始类型?

+1

如果你在Java 5的工作,编译器将抛出一个警告,当一个接口/类可以使用泛型。您每次需要时都应该使用仿制药。 – 2012-07-13 05:18:36

回答

1

如果一个类被声明如下:

public class MyClass<T> 

并且你使用这样的:

MyClass myVariable = new MyClass(); 

然后是的,这的确是一个原始类型,你不应该使用它。 集合类(如ArrayList) 是在Java 5通用的,你应该总是使用通用变种 当它可用。观看编译器警告; 他们通知使用泛型等等。

+0

编译器会在这里发出警告。你应该使用T类型的整数例如:'MyClass myVariable = new MyClass ();' – GingerHead 2012-07-13 05:43:06

0

看看这个示例类:

class Queue<T> { 
    private LinkedList<T> items = new LinkedList<T>(); 
    public void enqueue(T item) { 
     items.addLast(item); 
    } 
    public T dequeue() { 
     return items.removeFirst(); 
    } 
    public boolean isEmpty() { 
     return (items.size() == 0); 
    } 
} 

这与类型T的泛型类,你可以用在内部使用所需要的类型相关联所需的任何类型的建立,他的类的实例。

你可以实例化类,如果你想使用整型举例如下:

Queue<Integer> queue = new Queue<Integer>(); 

您还可以在一个类中使用一种以上类型如下:

class Pair<T,S> { 
    public T first; 
    public S second; 
    public Pair(T a, S b) { 
     first = a; 
     second = b; 
    } 
} 

而且实例化这样的:

Pair<String,Color> colorName = new Pair<String,Color>("Red", Color.RED); 

或者这样:

Pair<Double,Double> coordinates = new Pair<Double,Double>(17.3,42.8);