繁体   English   中英

传递参数对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM