参数化接口中的方法类型被删除,而该类型与参数化接口未连接。为什么?

时间:2019-04-26 11:52:45

标签: java generics java-8

我有一个界面:

import java.util.Optional;

public interface SomeInterface<T> {
    Optional<Integer> someMethod();
}

让我们调用接口实例的方法:

public class CheckInterfaceInstance {
    public void check(SomeInterface<?> instance) {
        instance.someMethod().get().doubleValue();
    }
}

一切都很好,没有编译错误。

但是,如果我声明check()方法的参数不带“任何类型”,那么我们将出现编译错误:

public class CheckInterfaceInstance {
    public void check(SomeInterface instance) {   //I removed <?>
        instance.someMethod().get().doubleValue();
    }
}

编译器将instance.someMethod().get()的类型视为对象。因此,它抱怨不存在方法.doubleValue()

如您所见,Optional<Integer> someMethod()声明与<T>的{​​{1}}根本无关。但是编译器错过了SomeInterface的类型。

为什么?

0 个答案:

没有答案