我正在尝试创建一个带有有限类型参数的接口,其实现提供了静态嵌套类来实现该参数,如下所示:

public interface InterfaceProblem<T extends IMyParameter>{
    T getParameterInstance();
}

interface IMyParameter {}

class MyClass implements InterfaceProblem<MyParameter> {
    public MyParameter getParameterInstance() {
        return new MyParameter();
    }

    class MyParameter implements IMyParameter{}
}


这给我MyClass声明及其方法上的编译错误“无法将MyParameter解析为类型”。如果我将静态类移动到其自己的类型,则此消失:

class MyClass implements InterfaceProblem<MyParameter> {
    public MyParameter getParameterInstance() {
        return new MyParameter();
    }
}

class MyParameter implements IMyParameter{}


但是,我想避免这种情况,因为MyParameter实现与MyClass实现紧密相关。有没有更好的方法可以达到这个目的?这是正确的编译器行为吗? (我正在使用Eclipse Mars和Oracle jdk1.8.0_60)

最佳答案

您缺少导入:

import com.example.MyClass.MyParameter;


虽然MyParameter类型在getParameterInstance()方法的返回类型的范围内,但不适用于MyClass<T>绑定

09-10 09:52