java泛型问题 请高手帮帮忙

wb952581385 2008-03-15 12:41:43
有谁能帮帮忙 告诉我怎么理解
看这个程序:
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> 因此 即使“擦除”在方法或类内部移除了有关实际类型的信息 编译器仍旧可以确保在方或类中使用的类型的内部一致性 因为擦除在方法体中移除了类型信息 所以在运行时的问题就是“边界”:即对象进入和离开方法的地点 这些正式编译器在编译期执行类型检查并插入转型代码的地点


其中的“擦除” 和 “边界”该怎么理解呢
书上还说了一句:边界就是发生动作的地方
...全文
157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainsilence 2008-03-19
  • 打赏
  • 举报
回复
thinking in java 要连起来看,后面的东西跟前面的概念有直接关系。
我人现在不再中国,不能给你指出来是在那一页,形状跟我的例子应该是差不多的。就在范性那章的后半部分。加油把,lz
rainsilence 2008-03-19
  • 打赏
  • 举报
回复
你这个例子不好
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);
}
zhaoweianan 2008-03-19
  • 打赏
  • 举报
回复
建议你去JAVA入门到精通里仔细研究研究范型这一章
DiligencyMan 2008-03-15
  • 打赏
  • 举报
回复
public class FilledListMake <T t,int n>
不是 public class FilledListMake(T t,int n)

这是泛型的一贯写法。
睿音 2008-03-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 FredWorks 的回复:]
public class FilledListMake(T t,int n)
有这种声明类的格式吗??什么时候类名后面可以带参数了?
[/Quote]
可能是楼主写错了~~应该是public class FilledListMake<T t,int n>

“擦除” 和 “边界”脑海里没有什么理解。呵呵~~~mark 学习
FredWorks 2008-03-15
  • 打赏
  • 举报
回复
public class FilledListMake(T t,int n)
有这种声明类的格式吗??什么时候类名后面可以带参数了?
wb952581385 2008-03-15
  • 打赏
  • 举报
回复
这是 “think in java 15.7.4 边界处的动作”
的内容
dracularking 2008-03-15
  • 打赏
  • 举报
回复
有没有英文原文啊

有点瞎猜

擦除就是人为移除有关方法或类内部实际类型信息
边界就是数据交换接口 应该是类或方法接受外界信息的地方 如参数

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧