假如有一个类,直接不加package,也就是属于默认包:
public class ClassInDefaultPackage { public void doSomething(){
System.out.println("I am in default package.");
}
}
另外一个类,处于com包(或者任何非默认包),如何使用上面这个属于默认包的类?
package com;import ??;
public class ClassInComPackage { public static void main(String[] args){
ClassInDefaultPackage obj=new ClassInDefaultPackage();
obj.doSomething();
}
}我试了,
import *;
import *.*;
import ClassInDefaultPackage;
都不行,Eclipse也无法自动引入。是java特性规定无法引用默认包的类吗?
public class ClassInDefaultPackage { public void doSomething(){
System.out.println("I am in default package.");
}
}
另外一个类,处于com包(或者任何非默认包),如何使用上面这个属于默认包的类?
package com;import ??;
public class ClassInComPackage { public static void main(String[] args){
ClassInDefaultPackage obj=new ClassInDefaultPackage();
obj.doSomething();
}
}我试了,
import *;
import *.*;
import ClassInDefaultPackage;
都不行,Eclipse也无法自动引入。是java特性规定无法引用默认包的类吗?
http://java.sun.com/docs/books/jls/third_edition/html/packages.html#7.4.2
import default.XxxClass;
关于有人说不如直接取消默认包或就报错之类的更好,我不这么认为这样好,首先为了监容老版本的jdk,不能这样做;再则,这样做也不科学,我自己写个没有包的程序玩玩不行吗?反正我要不是给别人用的,或者就测试用吧,如果这样不让人用,那反而会引起更大误会了.
至于高版本不允许导入默认包,我觉得是有道理的,不然这不利于项目模块分类,类越多,越复杂,阅读代码越困难.
在默认包里有个类:
public class DefaultPackage {
public void disp(){
System.out.println("Hello World!");
}
}而如果你想再包test下的类中调用disp()方法可以这样:
package test;import java.lang.reflect.*;public class TestDefaultPackage { public static void main(String[] args) throws Exception{
Class c = Class.forName("DefaultPackage");
Method m = c.getDeclaredMethod("disp", null);
m.invoke(c.newInstance(), null);
}}LZ别忘了加分哟!