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