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()的动态实例。