我想做这个:
Foo<String> foo = new Foo<>();
Foo<String>.Bar fooBar = foo.new Bar();
fooBar.doSomething("this works!");
Run Code Online (Sandbox Code Playgroud)
但是,单行中的前两行如下:
Foo<String>.Bar fooBar2 = new Foo<>().new Bar();
fooBar2.doSomething("The above line gives: incompatible types. Required: Foo.Bar Found: Foo.Bar");
Run Code Online (Sandbox Code Playgroud)
但第一行失败了.我明白了:
不兼容的类型.
必需:Foo.Bar
发现:Foo.Bar
这是为什么?
public class Foo<T> {
public class Bar extends SomeOtherClass<T> {
public void doSomething(T t) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后一堂课:
public class SomeOtherClass<T> {
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,Java无法很好地处理类型推断(当人们认为应该这样做时).这是其中一种情况.
如果您明确地将类型传递给new调用,它将编译:
Foo<String>.Bar fooBar2 = new Foo<String>().new Bar();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |