Ale*_*yon 0 java wildcard covariance
我尝试从我的Main获取foo():
<T extends Main> T foo()
{
return this; // "this" it is a instance of Main
}
Run Code Online (Sandbox Code Playgroud)
并使用它
Main m = new Main();
Main m2 = m.foo();
Run Code Online (Sandbox Code Playgroud)
我在方法foo()中遇到错误:" 不兼容的类型.必需的T,找到主要 ".
我知道我可以用这个:
<T extends Main> T foo2(T a) {
return a;
}
Run Code Online (Sandbox Code Playgroud)
并使用它:
Main m = new Main();
Main m3 = m.foo2(m);
Run Code Online (Sandbox Code Playgroud)
它工作正常.但我无法理解,为什么我不能使用第一种方法?因为this
绝对是Main的实例扩展.
如果你<T extends Main> T foo();
在Type中定义Main
你不能只返回this
,因为它T
可能是一个子类型Main
,Main
当然不是.因此,如果你有MainSubType m = new Main().foo();
编译器想要诱导T
,MainSubType
但面对它只是类型Main
,所以你必须以艰难的方式解析它,我不能在这推荐,但这就是你去的方式<T extends Main> T foo(){return (T) this}
.如果你这样做,你应该确实能够编译其余的.
如果它不能与foo()中的(T)-cast一起使用,则需要提供更多的上下文/代码.
归档时间: |
|
查看次数: |
89 次 |
最近记录: |