2013-07-17 21 views
0

我写了这个命令行:Java导入一句

Field [] field=Hello_World.class.getFields(); 

,我用的import java.lang.*; sentnce,即假设导入所有的类在郎包。即使如此,当我写这个命令行时,它会抛出一个错误,并建议使用以下导入语句:import java.lang.reflect.Field;在我的支持下,它从lang包中导入了专业领域类。我不明白为什么我的原单导入语句不能解决这个问题(它应该导入所有的类,不是吗?)

+1

正如你可以检查可能的dup问题,'import'不会从递归中的包中得到类。 –

回答

0

java.lang。*导入lang包的所有类,但不导入子包子类。所以要导入反射的子类,必须导入java.lang.reflect.Field。

0

是的,这是程序包导入如何在Java中工作(并且应该可以工作)。例如,执行import javax.swing。 ;将导入javax.swing中的所有类。但不包括子包和它们的类。

1

你有两个误解:

  • 你并不需要导入java.lang。它是隐式导入的。
  • 导入xxx.*只导入xxx中的类和接口。它不会导入任何“子包”xxx;例如xxx.yyyxxx.yyy.zzz

所以你应该做的是摆脱import java.lang.*,并添加import java.lang.reflect.*。另外:很多人(包括我自己)认为导入类和接口的“明星”是个坏主意。它可能导致源头级的脆弱性;例如如果有人意外地将某个类添加到某个包中,该包与您从另一个包中导入的同名类相冲突。

0

反射不在lang。*包中。其分包语言包。你需要import java.lang.reflect。*它会工作。由于其他答案意味着导入不会导入子包。