[英]Getting type from class name with Java generics
我有以下类,我需要在构造函数中输入类型,我该怎么做?
public abstract class MyClass<T> {
public MyClass()
{
// I need T type here ...
}
}
编辑:
以下是我想要实现的具体示例:
public abstract class Dao<T> {
public void save(GoogleAppEngineEntity entity)
{
// save entity to datastore here
}
public GoogleAppEngineEntity getEntityById(Long id)
{
// return entity of class T, how can I do that ??
}
}
我想要做的是将此类扩展到所有其他DAO,因为其他DAO有一些特定于那些daos的查询并且不能是通用的,但这些简单查询通常应该可用于所有DAO接口/实现......
你可以在某种程度上得到它......不确定这是否有用:
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
abstract class MyClass<T> {
public MyClass() {
Type genericSuperclass = this.getClass().getGenericSuperclass();
if (genericSuperclass instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) genericSuperclass;
Type type = pt.getActualTypeArguments()[0];
System.out.println(type); // prints class java.lang.String for FooClass
}
}
}
public class FooClass extends MyClass<String> {
public FooClass() {
super();
}
public static void main(String[] args) {
new FooClass();
}
}
我们做到了这一点
public abstract BaseClass<T>{
protected Class<? extends T> clazz;
public BaseClass(Class<? extends T> theClass)
{
this.clazz = theClass;
}
...
}
在子类中,
public class SubClass extends BaseClass<Foo>{
public SubClass(){
super(Foo.class);
}
}
而你不能简单地添加一个构造函数参数?
public abstract class MyClass<T> {
public MyClass(Class<T> type) {
// do something with type?
}
}
如果我没有读错,你不会只想要
public <T> void save(T entity)
和
public <T> T getEntityById(Long id)
为您的方法签名?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.