Java 将类作为参数在方法中传递,并在If语句中使用此参数

Java 将类作为参数在方法中传递,并在If语句中使用此参数,java,class,runtime-type,Java,Class,Runtime Type,我想要这样的东西: public static List<Type> getProtocolls(Class clazz, Transaction trx) { Iterator<Type> iterator = trx.getContext().getProtocolls() List<Type> list = null; while (iterator.hasNext()) { if (iterator.next()

我想要这样的东西:

public static List<Type> getProtocolls(Class clazz, Transaction trx) {
    Iterator<Type> iterator = trx.getContext().getProtocolls()
    List<Type> list = null;
    while (iterator.hasNext()) {
        if (iterator.next() instanceof clazz) {
            list.add(iterator.next())
        }       
    }
    return list;
}
公共静态列表getProtocolls(类clazz,事务trx){
迭代器迭代器=trx.getContext().getProtocolls()
List=null;
while(iterator.hasNext()){
if(迭代器.next()实例clazz){
list.add(iterator.next())
}       
}
退货清单;
}

我主要讨论的是这一部分:
(iterator.next()instanceof clazz)
-这甚至可以像这样将类作为参数传递吗?Eclipse说“clazz无法解析为一个类型”。

您提到了引用,但您必须使用其中的类:-

public static List<Type> getProtocolls(Class clazz, Transaction trx) {
    Iterator<Type> iterator = trx.getContext().getProtocolls()
    List<Type> list = null;
    while (iterator.hasNext()) {
        if (iterator.next() instanceof Class ) {
            list.add(iterator.next())
        }       
    }
    return list;
}
公共静态列表getProtocolls(类clazz,事务trx){
迭代器迭代器=trx.getContext().getProtocolls()
List=null;
while(iterator.hasNext()){
if(类的迭代器.next()实例){
list.add(iterator.next())
}       
}
退货清单;
}
您可以使用该方法。另外,请注意,在循环中有两个对
next()
的调用,因此您将跳过一半的元素-您应该将此调用的结果提取到局部变量:

while (iterator.hasNext()) {
    Type t = iterator.next();
    if (clazz.isAssignableFrom(t.getClass())) {
        list.add(t)
    }       
}
编辑:

正如@Fildor在评论中指出的,您还忘记初始化
列表
。与其初始化为当前拥有的
null
list,不如在
list list=new LinkedList()的下面几行创建一些内容

尝试使用
if(iterator.next()instanceof clazz,class){
@SaviNuclear-根本不起作用:(旁注:在使用列表之前,您应该实例化它。但这不是问题实例的解决方案。
instanceof class
而不是
clazz
if(iterator.next()instanceof class){
和他的
列表
null
。如果(clazz.isInstance(t))他事先不知道类,也可以使用
。这就是为什么这里必须使用
clazz.isAssignableFrom()的动态实例。