有谁能帮帮忙 告诉我怎么理解
看这个程序:
import java.util.*
public class FilledListMake(T t,int n)
{
List<T> create(T t,int n)
{
List<T> result = new ArrayList<T>;
for(int i = 0;i<n;i++)
{
result.add(t);
}
return result;
}
public static void main(String[]args)
{
FilledListMake<String> stringMaker = new FilledListMake<String>;
List<String> list = stringMaker.create("Helllo",4);
System.out.println(list);
} 书上是这样说的 即使编译器无法知道有关create()中T的任何信息 但是它仍旧可以在编译期确保你放置到result中的对象具有T类型 使其适合ArrayList<T> 因此 即使“擦除”在方法或类内部移除了有关实际类型的信息 编译器仍旧可以确保在方或类中使用的类型的内部一致性 因为擦除在方法体中移除了类型信息 所以在运行时的问题就是“边界”:即对象进入和离开方法的地点 这些正式编译器在编译期执行类型检查并插入转型代码的地点
其中的“擦除” 和 “边界”该怎么理解呢
书上还说了一句:边界就是发生动作的地方
看这个程序:
import java.util.*
public class FilledListMake(T t,int n)
{
List<T> create(T t,int n)
{
List<T> result = new ArrayList<T>;
for(int i = 0;i<n;i++)
{
result.add(t);
}
return result;
}
public static void main(String[]args)
{
FilledListMake<String> stringMaker = new FilledListMake<String>;
List<String> list = stringMaker.create("Helllo",4);
System.out.println(list);
} 书上是这样说的 即使编译器无法知道有关create()中T的任何信息 但是它仍旧可以在编译期确保你放置到result中的对象具有T类型 使其适合ArrayList<T> 因此 即使“擦除”在方法或类内部移除了有关实际类型的信息 编译器仍旧可以确保在方或类中使用的类型的内部一致性 因为擦除在方法体中移除了类型信息 所以在运行时的问题就是“边界”:即对象进入和离开方法的地点 这些正式编译器在编译期执行类型检查并插入转型代码的地点
其中的“擦除” 和 “边界”该怎么理解呢
书上还说了一句:边界就是发生动作的地方
的内容
有这种声明类的格式吗??什么时候类名后面可以带参数了?
不是 public class FilledListMake(T t,int n) 这是泛型的一贯写法。
public class Animal{
}
public class Cat extends Animal {
}// class 定义错误,编译估计不通过的。int i,不能出现在范性里
//该为public class FilledListMake <T t>//接下来你的FilledListMake 类中的main方法我改一下。
public static void main(String[]args)
{
FilledListMake <Animal> stringMaker = new FilledListMake <Animal> ;
// 这里由于方法体范性参数是Animal,所以方法内部把Cat转化为Animal,Cat对象向上转型,无法直接引用Cat自由的方法和属性,称为擦除
List <Animal> list = stringMaker.create(new Cat(),4);
// 这里由于方法的返回值戴上了Cat,也就是List <Cat>,Java内部有一个处理,可以自动转化为返回值的范性类型。这里就是边界,也就是发生动作的地方。所以thinking in java后面有一张专门讲了如何写一个共通函数,虽然作者说没有少写几行代码,实际中也没有什么意义。但是对理解边界非常有帮助。这里的边界和?super Class ? extends Class 有相似之处。
List <Cat> list = stringMaker.create(new Cat(),4);
System.out.println(list);
}
我人现在不再中国,不能给你指出来是在那一页,形状跟我的例子应该是差不多的。就在范性那章的后半部分。加油把,lz