Javaの:genericisedクラスのサブクラス
-
22-09-2019 - |
質問
私は次のように私はサブクラスに望むこと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);
}
}
所属していません StackOverflow