我正在尝试创建一个带有有限类型参数的接口,其实现提供了静态嵌套类来实现该参数,如下所示:
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>
绑定