与通用参数的接口 - 无法编译

时间:2012-07-08 15:02:55

标签: java generics interface

我有这样的界面:

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它不喜欢它,我可以让它编译的唯一方法是省略通用参数 - 感觉不对。

出了什么问题?

3 个答案:

答案 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() {

    }
}