我有下课。
public class SomeClass<T extends CustomView> {
public void someMethod() {
T t; // = new T(context) ...compile error!
// I want instance of SomeType that have parameter(context) of constructor.
t.go();
}
}
我想用构造函数的参数创建泛型类型T的实例。
我尝试TypeToken
,Class<T>
,newInstance
等,但没有成功。我想要一些帮助。谢谢你的回答。
答案 0 :(得分:6)
您有两个主要选择。
这种方式不是静态类型安全的。也就是说,编译器无法保护您不使用没有必要构造函数的类型。
public class SomeClass< T > {
private final Class< T > clsT;
public SomeClass( Class< T > clsT ) {
this.clsT = clsT;
}
public someMethod() {
T t;
try {
t = clsT.getConstructor( context.getClass() ).newInstance( context );
} catch ( ReflectiveOperationException roe ) {
// stuff that would be better handled at compile time
}
// use t
}
}
您必须声明或导入Factory< T >
接口。调用者还有一个额外的负担,即将其实例提供给SomeClass
的构造函数,这进一步侵蚀了类的实用程序。但是,它是静态类型安全的。
public class SomeClass< T > {
private final Factory< T > fctT;
public SomeClass( Factory< T > fctT ) {
this.fctT = fctT;
}
public someMethod() {
T t = fctT.make( context );
// use t
}
}