引用 csdn 里别人提的这个问题,我遇到了和这个一样的问题 ,即 build path 根目录下,定义的类,没有包名,其它位置引用这里的类,不好import ,直接使用 类名 ,编译器又会报错。
-- 本篇文章的结论是,java工程要建立良好的包结构,尽量不要在 package 根目录建类。
问题文章链接如下: http://bbs.csdn.net/topics/330219738
问题如下:
我们都知道java有个 default package
我有这样的一段代码在defualt package 里面有这样一个java文件
public class helloworld {
public static void output(){
System.out.println("hello world!");
}
}
我又生成了一个package comm 里面有这样一个java文件
package comm;
public class test {
public static void main(String[] args){
helloworld.output(); //这段代码有问题,他不认识在default package里面的helloworld
}
}
为什么在comm这个package无法识别default package里面的东西呢,如何才能让他访问default package里面的东西呢?先谢谢了!!
精辟回答1: ava中其他包中无法引用缺省包中的类。
因为默认包的类没有包名, 在被有包结构的类引用时,会被当成本包内的类。即编译器会在comm包下查找helloworld类,自然是找不到的。而由于没有包名,也无法使用import导入。
精辟回答2:建立LZ养成建包的好习惯。
精辟回答3:这个问题有解,可以用最原始的类调用default package下的类,具体方法如下:
1。加载类
Class class = Class.forName("被调用类名");
2。调用类中的方法
Method method= snmpHandler.getMethod("被调用方法名", new Class[] { 参数列表类型 });
Object value = method.invoke(class.newInstance(), new String[]{ "参数一","参数二"});
举个例子,如:想调用的类名为MyClass,其中有方法为String myMethod(String str1,String str2);
则调用如下:
Class class = Class.forName("MyClass");
Method method= snmpHandler.getMethod("myMethod", new Class[] { String.class,String.class });
String value = method.invoke(class.newInstance(), new String[]{ "str1","str2"});
ok到此解决该问题