首页 > 解决方案 > 参数化接口中的方法类型被删除,而该类型与参数化接口没有连接。为什么?

问题描述

我有和界面:

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()视为对象。所以它抱怨 not existing method .doubleValue()

如您所见,声明与ofOptional<Integer> someMethod()完全无关。但是编译器错过了.<T>SomeInterfaceOptional

为什么?

标签: javagenericsjava-8

解决方案


推荐阅读