我的意思是,在下面的代码中:
class base {
}
class derived extends base {
}
class WTF {
public void func(List<base> list) {
}
public void tryit() {
func(new List<base>()); // ok
func(new List<derived>()); // not ok
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果函数只是一个base的对象,它可能需要一个派生对象.为什么是这样?
Col*_*inD 14
func 需要定义为
public void func(List<? extends base> list) { ... }
Run Code Online (Sandbox Code Playgroud)
这是因为a List<derived>实际上并不是a List<base>,因为a List<base>允许其中的任何一种base,而List<derived>只允许derived和它的子类.使用? extends base可确保您不能添加任何东西,但null到了List,因为你不知道什么样的子类base列表可能会允许.
顺便说一下,你应该尝试遵循标准的Java命名约定......以小写字母开头的类看起来很奇怪,就像它们是原始的一样.
| 归档时间: |
|
| 查看次数: |
1297 次 |
| 最近记录: |