我有一个这样的简单的界面。Java通用类型与扩展和T使用休眠
public interface EntityClass
{
public void setId(final Integer id);
public Integer getId();
}
和一类
public Student implements EntityClass
我想代码使用泛型类型T
一类,但仍然是一个的instanceof EntityClass
a EntityClass subclass
这样的事情。
public abstract class CustomizableQueriesForClazzAndFields<T extends EntityClass>
这是该类中的项目,我想要一个像这样的方法。
public List<T>getMultipleClazzWithFields(final String ...fields){return of(genericType).retrieve(fields);}
private MyCriteria of(final Class<? extends EntityClass>applyToClazz){........}
MyCriteria是org.hibernate.Criteria的包装。
而在我的实现会做这样的事情。
public final class TestCustom extends CustomizableQueriesForClazzAndFields<Student>
{
public static void main(String[] args)
{
final TestCustom clazz = new TestCustom();
final List<Student>a=clazz.getMultipleClazzWithFields("id","name","phone");
a.stream().forEach(clazz::consumer);
}
}
这样做代码我想是表示像这样使用泛型。
public List<Student>getMultipleClazzWithFields(final String ...fields){return of(Student.class).retrieve(fields);}
但我不知道如何表示这个或如果它是可能的。
public List<T>getMultipleClazzWithFields(final String ...fields){return of(genericType).retrieve(fields);}
哪些genericType应该把它表示Student
相同Student
为
public final class TestCustom extends CustomizableQueriesForClazzAndFields<Student>
,或者代表它作为
public final class TestCustom extends CustomizableQueriesForClazzAndFields<School>
,并会做这样的事情
public List<School>getMultipleClazzWithFields(final String ...fields){return of(School.class).retrieve(fields);}
因为我是这样潜水
public List<T>getMultipleClazzWithFields(final String ...fields){return of(T).retrieve(fields);}
但编译器踢我说。
cannot find symbol
symbol: variable T
location: class CustomizableQueriesForClazzAndFields<T>
where T is a type-variable:
T extends EntityClass declared in class CustomizableQueriesForClazzAndFields
----
(Alt-Enter shows hints)
我也尝试
public abstract class CustomizableQueriesForClazzAndFields<Class<T extends EntityClass>>
但是说。
> expected
----
(Alt-Enter shows hints)
或者我如何完成我的愿望代码..任何workaorund。
因为我是一种烦人的传递参数。
UPDATE
所有我想要做的是传递的EntityClass
一个子类,并创建。
session.createCriteria(genericType);
除了给我的名单,但我不知道是否有可能赶上或捕获泛型类型通CustomizableQueriesForClazzAndFields<Student>
并传递给of()
方法,它是谁,因为在创建org.hibernate.Criteria object
我不能只传递一个T
值我图想成为一个EntityClass
不是一个子类只是一个raw T value.
我需要赶上或捕获
CustomizableQueriesForClazzAndFields<Student>
Student generic type.
如果这可能或者我梦见我可怜的英语感到抱歉。
感谢了很多,从委内瑞拉的问候..
我不,如果十分确定我得到你的问题在哪里,但为什么你使用'Class <?扩展EntityClass>'而不是简单地使用T?是否有可能给予更多的在线人作为你想要达到的目标? – wastl 2015-03-02 13:39:33
pleasee我编辑的问题... – chiperortiz 2015-03-02 14:19:59