首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递参数对象

传递参数对象
EN

Stack Overflow用户
提问于 2011-10-30 04:10:51
回答 3查看 142关注 0票数 1

我有这个测试方法:

代码语言:javascript
复制
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进行调用?类似于:

代码语言:javascript
复制
load(Foo.class, testObject)

有可能吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-30 04:14:19

每个泛型类型都必须扩展Object,所以这就足够了:

代码语言:javascript
复制
public <T> void load(Class<T> className, T object)
{
    // snip...
}
票数 4
EN

Stack Overflow用户

发布于 2011-10-30 04:12:31

代码语言:javascript
复制
public <X> void load(Class<X extends Object> className, X object)

我想这就是你的意思。

票数 3
EN

Stack Overflow用户

发布于 2011-10-30 04:52:18

这应该是可行的。

代码语言:javascript
复制
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()中,因为我们将只使用对象的类,这具有相同的效果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7941389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档