我写了这个命令行:
Field [] field=Hello_World.class.getFields();
我使用import java.lang.*;
sentnce,假设导入lang包中的所有类。即便如此,当我写这个命令行时,它会给我一个错误并建议使用以下导入语句:import java.lang.reflect.Field;对于我的下属,从lang包中导入speciefic字段类。我不明白为什么我的原始导入句子没有解决这个问题(它应该导入所有的类,不是吗?)
答案 0 :(得分:1)
你有两个误解:
java.lang
。它是隐式导入的。xxx.*
仅导入xxx
中的类和接口。它不会导入xxx
的任何“子包”;例如xxx.yyy
或xxx.yyy.zzz
。所以你应该做的就是摆脱import java.lang.*
,然后添加import java.lang.reflect.*
。
除此之外:很多人(包括我自己)都认为“明星”导入类和接口是一个坏主意。它可能导致源级脆弱;例如如果有人意外地将某个类添加到某个包中,该类与从另一个包导入的同名类冲突。
答案 1 :(得分:0)
java.lang。*导入lang包的所有类,但不导入其子包子类。所以要导入reflect的子类,你必须导入java.lang.reflect.Field。
答案 2 :(得分:0)
是的,这就是包导入在Java中工作(并且应该起作用)的方式。例如,执行import javax.swing。;将导入javax.swing。中的所有类,但不导入子包及其类。
答案 3 :(得分:0)
反射不在lang。*包中。它的子包到语言包。你需要导入java.lang.reflect。*它会工作。由于其他答案暗示导入不导入子包。