我只是想知道以下代码的用法:
public class Sub extends java.util.ArrayList<String> {...}
对通用约束java.util.ArrayList<String>
没有任何编译限制。
答案 0 :(得分:3)
在这种情况下,编译器会根据类型参数对其他代码进行限制。
这将编译
public class Sub extends java.util.ArrayList<String> {
void addTwice(String s) { this.add(s); this.add(s); }
}
但这不会
public class Sub extends java.util.ArrayList<String> {
void addTwice(Object x) { this.add(x); this.add(x); }
}
答案 1 :(得分:1)
假设您正在制作一本书的索引,但您不知道需要多少索引。您可以创建课程BookIndex extends ArrayList<String>
,或者如果您想变得挑剔:BookIndex extends ArrayList<IndexEntry>
。
/ E1
此外,当一个类扩展类似ArrayList<String>
的通用类时,可以从通用声明中获取String
,这与您拥有类ArrayList<T>
不同。在ArrayList<T>
中,您永远无法弄清楚T
是什么。
答案 2 :(得分:1)
您可以扩展课程ArrayList
,但这不是您通常应该做的事情
只有在你可以说实话“extends
”时才会说“this class IS-A that class.
”
请记住,扩展标准类不是一个好的做法
为什么不这样使用?
public class Sub {
List<String> s = new ArrayList<String>();
// ..
// ...
}
答案 3 :(得分:0)
如果您这样做,您可以添加ArrayList
的基本功能,甚至可以更改其正常功能。
例如,您可以覆盖add()
方法,以便它只会将电子邮件添加到列表中。