必需类型与找到的类型相同

cla*_*l3r 5 java types

我想做这个:

    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)

Mak*_*oto 6

在某些情况下,Java无法很好地处理类型推断(当人们认为应该这样做时).这是其中一种情况.

如果您明确地将类型传递给new调用,它将编译:

Foo<String>.Bar fooBar2 = new Foo<String>().new Bar();
Run Code Online (Sandbox Code Playgroud)