我有以下课程,我需要输入构造函数,我该怎么做?
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接口/实现...
答案 0 :(得分:7)
你可以在某种程度上得到它......不确定这是否有用:
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();
}
}
答案 1 :(得分:4)
我们已经完成了这个
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);
}
}
答案 2 :(得分:0)
你不能简单地添加构造函数参数吗?
public abstract class MyClass<T> {
public MyClass(Class<T> type) {
// do something with type?
}
}
答案 3 :(得分:0)
如果我没有读错,你不会只想要
public <T> void save(T entity)
和
public <T> T getEntityById(Long id)
您的方法签名?