你调用的是list.iterator,和你这个类中写的hasNext()方法没关系,把你这个类中写的hasNext()方法注释掉,没有区别。
再看这个错误信息:Exception in thread "main" java.lang.IllegalAccessException: Class T can not acc
ess a member of class java.util.AbstractList$Itr with modifiers "public"
非法接收异常:T这个类不可以接收java.util.AbstractList$Itr这个类中用 "public"修饰的成员。
而且你这个错误在11行,而不是第10行(把11行注释掉程序正常),那么我就想是不是list.iterator产生的对象不可以被反射invoke调用呢?
查看API文档中的invoke方法:
public Object invoke(Object obj,
Object... args)
throws IllegalAccessException, //你的问题就是这个异常,所以查看此异常信息
IllegalArgumentException,
InvocationTargetException
IllegalAccessException - 如果此 Method 对象强制执行 Java 语言访问控制,并且底层方法是不可访问的。(这是invoke中的解释,底层方法不可访问,还是有点不清晰,继续查看IllegalAccessException的API文档)
public class IllegalAccessExceptionextends Exception
当应用程序试图反射性地创建一个实例(而不是数组)、设置或获取一个字段,或者调用一个方法,但当前正在执行的方法无法访问指定类、字段、方法或构造方法的定义时,抛出 IllegalAccessException。
(看到这里就明白了,说白了就是无法访问到it中的hasNext()方法而已,这个方法是底层中的,所以不可以被调用。当你看到此类问题的时候,语法没错误,就看错误提示,然后根据提示去查API文档,很容易理解的)
|