我有一个类需要使用Class<T>
参数(请参阅我之前的半相关question)。它是:
public class BaseTable<T extends TableEntry>
{
protected Class<T> mClass;
...
public BaseTable(int rows, int cols, Class<T> clasz)
{
...
mClass = clasz;
}
public BaseTable(int rows, int cols)
{
this(rows, cols, StringTableEntry.class);
//Does NOT compile:
//expected [int, int, Class<T>], but got
//[int, int, Class<blah.blah.StringTableEntry>]
}
...
}
我想知道为什么构造函数(带有2个参数)不起作用,但是当我从外部类调用完全相同的东西时,如下所示:
mSomeTable = new BaseTable<StringTableEntry>(2, 2, StringTableEntry.class);
它编译并运行而不抱怨。为什么这样,以及如何解决这个问题?
谢谢!
答案 0 :(得分:4)
具有泛型类型参数的类的构造函数可用于构造具有任何类型(适合类声明中的边界)的类。那么,如果有人说:
会发生什么new BaseTable<SomeTypeUnrelatedToStringTableEntry>(rows, cols)
作为解决方法,请使用静态工厂方法:
public static BaseTable<StringTableEntry> newStringTableEntryBaseTable(
int rows, int cols)
{
return new BaseTable<StringTableEntry>(rows, cols, StringTableEntry.class);
}
或者你可以创建一个子类:
class StringTableEntryBaseTable extends BaseTable<StringTableEntry>
{
StringTableEntryBaseTable(int rows, int cols)
{
super(rows, cols, StringTableEntry.class);
}
}