0

我有一个这样的界面:

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

    }
}

我的班级1:

public abstract class Myclass1<E extends Something1> {

    public Myclass1(){

    }
}

问题是 meth1() 的参数应该是通用的。如果我做 MyClass1 它不喜欢它,我可以让它编译的唯一方法是省略通用参数 - 这感觉不对。

怎么了?

4

3 回答 3

1

所以,这个编译,其中 MyClass1 恰好是一个列表:我错过了什么吗?你的代码不一样吗?如果一切都一样,那么您选择的 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);
}
于 2012-07-08T15:09:40.883 回答
1

不是强制性的

public abstract class Superclass<E extends Something1> implements MyInterface<E>

强制的

public class MyClass2<E extends Something1> extends Superclass<E>

一切都将编译,方法将是通用的

于 2012-07-08T15:19:40.857 回答
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() {

    }
}
于 2012-07-08T15:26:52.857 回答