我想做这个:
Foo<String> foo = new Foo<>();
Foo<String>.Bar fooBar = foo.new Bar();
fooBar.doSomething("this works!");
但是单行中的前两行如下:
Foo<String>.Bar fooBar2 = new Foo<>().new Bar();
fooBar2.doSomething("The above line gives: incompatible types. Required: Foo.Bar Found: Foo.Bar");
但第一行失败了。我得到:
不兼容的类型。
必需:Foo.Bar
发现:Foo.Bar
这是为什么?
public class Foo<T> {
public class Bar extends SomeOtherClass<T> {
public void doSomething(T t) {
}
}
}
最后一堂课:
public class SomeOtherClass<T> {
}
在某些情况下,Java 无法很好地处理类型推断(当人们认为它应该处理时)。这是其中一种情况。
如果您显式地将类型传递给new
调用,它将编译:
Foo<String>.Bar fooBar2 = new Foo<String>().new Bar();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)