已经,如果是Collection<String> col;
那么col中存放的必须是String类型的元素..我看API,有Collection<E>这样的写法? 这个E是代表了什么?
代表了任何Object吗?我自己在IDE中写下这样的代码:private List<E> list;
这时IDE不认识这个E, 我想问问,怎么让这个地方,不报错呢??
那么col中存放的必须是String类型的元素..我看API,有Collection<E>这样的写法? 这个E是代表了什么?
代表了任何Object吗?我自己在IDE中写下这样的代码:private List<E> list;
这时IDE不认识这个E, 我想问问,怎么让这个地方,不报错呢??
但不要忘了object也是一种类型,用object可以达到令容器可以存储任何类型的值 但是它E表示的是任何的类型 不能只局限于object 本身 ,有的时候我们要求我们的元素保留自己的特性 ,一旦他被转换成 object 它的特性就失去了,除非你再将它转换成它原来的类型才可以。 public static Collection fill(Collection<String> c){
c.add("cat");
c.add("dog");
return c;
} 这样就可以了,Collection<String>中的尖括号中代表的是你的容器中所存储的元素的类型。
K - Key
N - Number
T - Type
V - Value
在定义一个类的时候可以用
如:
class Test<E> {}
其他的不懂,这个东西感觉有点抽象
class T<E> {
private T<E> t = null;
T(){
}
public void writer(){
t = new T<E>();
}
}
E只是一个泛指符号,使用泛型创建具体对象时间,必须是具体的类型。
一旦你声明对象时给定了E的类型。那么在你定义类的地方使用到的E的类型,必须都为声明时的类型。
不是
public class Box<T> {
private T t;
private void add(T t) {
this.t = t;
}
public T get() {
return t;
}
public static void main(String[] args) {
Box<Integer> boxInt = new Box<Integer>();
boxInt.add(1);
Integer intResult = boxInt.get();
Box<String> boxStr = new Box<String>();
boxStr.add("Test");
String strResult = boxStr.get();
System.out.println("Integer Result : " + intResult);
System.out.println("String Result : " + strResult);
}
}
<E>就类似一枚举,
但不是用在代码中的,
只是用来阐述字面意思的。
表示对象。
不是JDK内置的,本身在代码中并没有特殊含义。
比如说Sting、Interger,当然也可以是你自己创建的object
Collection <String> col 这里的是声明。如果 在创建 一个类是就可以使用泛型。例如: class A<T>{} class B<P,K>{} 这样的写法。同样在类中也可以class B<P,K>{private P p;
private K k;
} 如果 B 类写好了,我们通过 B<String,String> b = new B<String,String>(); 这样的写法当然也可以 A<?> a = new A<?>(); ?表示泛指。
public class 类名<随便一个符号>
在JDK1.5中,像LinkedList类这样定义
public class LinkedList <Element>{
boolean add(Element 0)
{
......
}
Element getFirst()
{
.......
}
}一旦声明了某个类型名,就可以在泛型代码体内任何期望出现类型的地方使用。
你使用的时候得告诉编译器你要的类型~
譬如 Stringprivate List<String> list;