我有这样的界面:
public interface MyInterface<E extends Something1> {
public void meth1(MyClass1<E> x);
}
我有一个子类,其超类实现上述接口:
public class MyClass2<E extends Something1> extends Superclass{
public MyClass2(){
}
public void meth1(MyClass1 x) {
// TODO Auto-generated method stub
}
}
超类:
public abstract class Superclass<E extends Something1> implements MyInterface{
MyClass1<E> x;
protected E y;
public Superclass(){
}
}
MyClass1的:
public abstract class Myclass1<E extends Something1> {
public Myclass1(){
}
}
问题是meth1()的参数应该是通用的。如果我做MyClass1它不喜欢它,我可以让它编译的唯一方法是省略通用参数 - 感觉不对。
出了什么问题?
答案 0 :(得分:1)
所以,这个编译,MyClass1碰巧是List: 我错过了什么?你的代码不一样吗?如果它完全相同,那么您选择MyClass1可能会发生一些事情。另外,我们错过了MyClass2的超类,这也可能有问题......
import java.util.List;
public class MyClass2<E extends Object> extends Object{
public MyClass2(){
}
public void meth1(List<E> x) {
// TODO Auto-generated method stub
}
}
interface MyInterface<E extends Object> {
public void meth1(List<E> x);
}
答案 1 :(得分:1)
不是强制性的
public abstract class Superclass<E extends Something1> implements MyInterface<E>
强制性
public class MyClass2<E extends Something1> extends Superclass<E>
所有将编译,方法将是通用的
答案 2 :(得分:1)
以下是适当参数化的课程:
class Something1 { }
public interface MyInterface<E extends Something1> {
public void meth1(MyClass1<E> x);
}
// and I have a subclass whose superclass implements the above interface:
public class MyClass2<E extends Something1>
extends Superclass<E> {
public MyClass2() { }
public void meth1(MyClass1<E> x) { }
}
// superclass:
public abstract class Superclass<E extends Something1> implements
MyInterface<E> {
MyClass1<E> x;
protected E y;
public Superclass() { }
}
// MyClass1:
public abstract class MyClass1<E extends Something1> {
public MyClass1() {
}
}