将Class对象传递给方法

时间:2015-11-10 15:22:38

标签: java

我有一个库方法,它按类名返回一个对象集合。

例如

Iterable x = RunState.getInstance().getMasterContext().getObjects(XAgent.class);

将返回上下文中所有InstanceOf XAgent.class

对象的列表

如果以这种方式使用它,它的效果非常好。我怎么需要一个方法来将类名传递给。

public Iterable getObjectsFromContext(Class clazz) {
        return RunState.getInstance().getMasterContext().getObjects(clazz);
    }

getObjectsFromContext(XAgent.class);

然后它不再起作用,它返回上下文的所有对象...所以它为什么不通过我的" clazz"变量到getObjects()?

这是getObjects()的链接ot javadoc; http://repast.sourceforge.net/docs/api/repast_simphony/repast/simphony/context/Context.html#getObjects-java.lang.Class-

IndexedIterable<T> getObjects(java.lang.Class<?> clazz)

更新:这有效:

 public Iterable getObjectsFromContext(Class<?> clazz) {
         return RunState.getInstance().getMasterContext().getObjects(clazz);
    }
    getObjectsFromContext(XAgent.class)

2 个答案:

答案 0 :(得分:1)

这对我有用:

public Iterable getObjectsFromContext(Class<?> clazz) {
     return RunState.getInstance().getMasterContext().getObjects(clazz);
}
getObjectsFromContext(XAgent.class)

建议给出正确答案,但我不再接受了,这就是我自己发布的原因。

答案 1 :(得分:-1)

这不起作用,因为你的包装器函数getObjectsFromContext显式地采用了一种“类”。

无论你传入什么,它都将被解释为类型“Class”,因此作为“Class”传递给getObjects()函数。这将解释为什么函数返回所有对象。

你需要让你的包装函数通用。

public Iterable<T> getObjectsFromContext(T clazz) {
    return RunState.getInstance().getMasterContext().getObjects(clazz);
}