[英]Pass the parameter Object
我有这个测试方法:
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)
可能吗?
每个泛型类型都必须扩展Object,因此就足够了:
public <T> void load(Class<T> className, T object)
{
// snip...
}
public <X> void load(Class<X extends Object> className, X object)
我想这就是你的意思。
这应该工作。
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 object)时,它将自动将T设置为该对象是任何类。 它会自动参数化空隙。
泛型非常有用。 例如,它在List和Set类以及Map中使用。 但是,它们带有自己的风险。 如果您不放置T扩展Base或某个类,则将得到编译错误,因为java无法确定传递的类将具有getId。 设置它必须继承的类将确保对象必须知道该方法。
用知道“ getId”的基类替换Base,并使所有其他甚至可能传递给load()的类扩展该类。 注意,无需将Class传递给load(),因为我们将只使用对象的类,这具有相同的效果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.