質問

私は次のように私はサブクラスに望むことgenericisedクラスを持っています:

public class SomeTable<T extends BaseTableEntry>
    extends BaseTable<T>
{

    public SomeTable(int rows, int cols)
    {
        super(rows, cols, SomeTableEntry.class);
        //Does not compile:
        //Cannot find symbol: constructor BaseTable(int, int, java.lang.Class<blah.blah.SomeTableEntry.class>)
    }
}

... genericisedスーパークラスがあります:

public class BaseTable<T extends BaseTableEntry>
{

    public BaseTable(int rows, int cols, Class<T> clasz)
    {
        ...
    }
...
}

私はコンパイラエラーを理解しますが、SomeTableコンストラクタで追加のパラメータを含めること以外、回避策を見つけるように見えることはできません。

任意の提案ですか?

ありがとうございます。

役に立ちましたか?

解決

このコンパイルます:

public class SomeTable extends BaseTable<SomeTableEntry> {
    public SomeTable(int rows, int cols)
    {
        super(rows, cols, SomeTableEntry.class);
    }
}

これは、キャストで動作します:

public class SomeTable<T extends BaseTableEntry> extends BaseTable<T> {
    public SomeTable(int rows, int cols)
    {
        super(rows, cols, (Class<T>)SomeTableEntry.class);
    }
}

私は、コンパイラがクラスのキャストを必要とする理由の説明を掲示誰かを楽しみにしています。

他のヒント

あなたはそれにあなたは、基本クラスで行うのと同じ方法をSomeTableを渡す場合、それは一般的にClassのコンストラクタを定義することが可能である。

public class BaseTable<T extends BaseTableEntry>
{
    public BaseTable(int rows, int cols, Class<? extends T> clazz)
    {
        // ...
    }
}

class SomeTable<T extends BaseTableEntry>
extends BaseTable<T>
{
    public SomeTable(int rows, int cols, Class<? extends T> clazz)
    {
        super(rows, cols, clazz);
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top