Project中如何正确导入第三方jar包

今天遇到一个问题,第三方ar包中的类怎么也无法导入,直接导致不能用。百思不得其解(......),在一番搜索之后问题得解。

从 J2SE 1.4 开始,Java 编译器不再支持 import 进未命包名的类、接口。也就是说,你不能在一个非默认包的类中访问默认包中的类或方法。既不能import,也不能直接使用。有大牛直接找到了官方的解释文档如下(竟然能这么精确定位,太牛了):
The compiler now rejects import statements that import a type from the unnamed namespace. Previous versions of the compiler would accept such import declarations, even though they were arguably not allowed by the language (because the type name appearing in the import clause is not in scope). The specification is being clarified to state clearly that you cannot have a simple name in an import statement, nor can you import from the unnamed namespace.

我用的两个第三方jar包为stdlib和algs4用官话说就是:The libraries in stdlib.jar and algs4.jar are in the "default" package. In Java, you can't access classes in the default package from a named package.

关于这个怎么破?据目测有两种方法:其一,自己的java文件也不要包名,就是默认包了,直接暴力之。另一种就是 利用反射机制:但似乎比较繁琐,有网友的例子如下:
非默认包是可以调用到默认包里的类的。这里要用到反射。比如:在默认包里有个类:

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);
}

}

如果jar包不想改,只能用上面的方法,但是推荐的做法是所以类都放在非默认包下(named space),否则项目模块分类,类越多,越复杂,阅读代码越困难.。这样的细节问题可能平时也不会遇到,遇到了还真不知道怎么解决。各种Google 、百度之后才破。感谢csdn网友:火龙果被占用了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值