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

    }
}

MyClass1:

public abstract class Myclass1<E extends Something1> {

    public Myclass1(){

    }
}

問題は、 meth1() のパラメーターがジェネリックであると想定されていることです。私が MyClass1 を実行すると、それは気に入らず、コンパイルする唯一の方法は、一般的なパラメーターを除外することです。これは間違っていると感じます。

何がうまくいかないのですか?

4

3 に答える 3

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 に答える
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 に答える