我用泛型方法测试了一些有界参数的内容,发现了一些奇怪的行为。如果有人能解释下面代码片段中的两个错误就太好了。
假设有两个类Class1和Class2都继承自BaseClass。Class2实现了一个接口。
在Class1中,我有一个方法以以下方式返回Class2的实例:
假设有两个类Class1和Class2都继承自BaseClass。Class2实现了一个接口。
在Class1中,我有一个方法以以下方式返回Class2的实例:
public class Class2 extends BaseClass implements Interface {
@Override
public void method() {
System.out.println("test"); //$NON-NLS-1$
}
}
public class Class1 extends BaseClass {
public <T extends BaseClass & Interface> T getTwo() {
return new Class2();
// Error: Type mismatch: cannot convert from Class2 to T
}
public static void main(String[] args) {
Interface two = new Class1().getTwo();
// Error: Bound mismatch: The generic method getTwo() of type Class1 is
// not applicable for the arguments (). The inferred type Interface is
// not a valid substitute for the bounded parameter <T extends BaseClass
// & Interface>
System.out.println(two);
}
}
getTwo
方法的返回类型必须是Class2
、BaseClass
或者Interface
。如果T
只在一个方法中定义,编译器就无法确定哪个类在行new Class1().getTwo()
中替换了T
。除非getTwo
方法具有这种类型的输入参数,否则不可能做到这一点。 - DRCB