我有这个测试方法:
public void load(Class<? extends Object> className, XXXX)
{
Criteria criteria = session.createCriteria(className);
List<Object> list = criteria.list();
for (Object item : list)
{
list.add(new Object(item.getId, item.getCode); /* Object doesn't know getId */
}
}如何替换load方法中的XXXX以使用具体的Object进行调用?类似于:
load(Foo.class, testObject)有可能吗?
发布于 2011-10-30 04:14:19
每个泛型类型都必须扩展Object,所以这就足够了:
public <T> void load(Class<T> className, T object)
{
// snip...
}发布于 2011-10-30 04:12:31
public <X> void load(Class<X extends Object> className, X object)我想这就是你的意思。
发布于 2011-10-30 04:52:18
这应该是可行的。
public <T extends Base> void load(T object){
Criteria criteria = session.createCriteria(object.class);
List<T> list = criteria.list();
for (T item : list)
{
System.out.println(item.getId)); /* Object doesn't know getId */
}
}通过将void参数化,您可以使用泛型。由于您正在寻找T的实例,而T尚未定义,因此当您将一个对象传递到load(T对象)中时,它会自动将T设置为该对象的任何类。它会自动参数化空心。
泛型非常有用。例如,它在List和Set类以及Map中使用。然而,它们也有自己的风险。如果你不放置T扩展基类或其他类,那么你会得到编译错误,因为java不能确定传递的类是否会有getId。设置它必须继承的类将确保对象必须知道该方法。
将Base替换为知道"getId“的基类,并使所有其他类都可以通过传入load()来扩展该类。请注意,不需要将Class传递到load()中,因为我们将只使用对象的类,这具有相同的效果。
https://stackoverflow.com/questions/7941389
复制相似问题