我写了这个命令行:Java导入一句
Field [] field=Hello_World.class.getFields();
,我用的import java.lang.*;
sentnce,即假设导入所有的类在郎包。即使如此,当我写这个命令行时,它会抛出一个错误,并建议使用以下导入语句:import java.lang.reflect.Field;在我的支持下,它从lang包中导入了专业领域类。我不明白为什么我的原单导入语句不能解决这个问题(它应该导入所有的类,不是吗?)
我写了这个命令行:Java导入一句
Field [] field=Hello_World.class.getFields();
,我用的import java.lang.*;
sentnce,即假设导入所有的类在郎包。即使如此,当我写这个命令行时,它会抛出一个错误,并建议使用以下导入语句:import java.lang.reflect.Field;在我的支持下,它从lang包中导入了专业领域类。我不明白为什么我的原单导入语句不能解决这个问题(它应该导入所有的类,不是吗?)
java.lang。*导入lang包的所有类,但不导入子包子类。所以要导入反射的子类,必须导入java.lang.reflect.Field。
是的,这是程序包导入如何在Java中工作(并且应该可以工作)。例如,执行import javax.swing。 ;将导入javax.swing中的所有类。但不包括子包和它们的类。
你有两个误解:
java.lang
。它是隐式导入的。xxx.*
只导入xxx
中的类和接口。它不会导入任何“子包”xxx
;例如xxx.yyy
或xxx.yyy.zzz
。所以你应该做的是摆脱import java.lang.*
,并添加import java.lang.reflect.*
。另外:很多人(包括我自己)认为导入类和接口的“明星”是个坏主意。它可能导致源头级的脆弱性;例如如果有人意外地将某个类添加到某个包中,该包与您从另一个包中导入的同名类相冲突。
反射不在lang。*包中。其分包语言包。你需要import java.lang.reflect。*它会工作。由于其他答案意味着导入不会导入子包。
正如你可以检查可能的dup问题,'import'不会从递归中的包中得到类。 –