VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
楼主: xenon1

怎么在有包类下调用无包类

  [复制链接]

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-29 09:45:01 | 显示全部楼层
顶下
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-29 10:00:01 | 显示全部楼层
[Quote=引用 4 楼 独舞明夕 的回复:]
而当把代码放到包下面的一个类时就总是编译不过.

你可以简单的这样做
1 把那些无包的类放在根上,
2 你的类按照package目录存放
3 在跟上运行即可

/Company.class
/com/mycompany/MyCom.class

这样就可以了

如果你在Eclipse里面运行,请参考6楼的做法,把class的路径加入到 build path 里面即可,
【Java Build Path】【Libraries】 【Add Class Folder 】

当然,打包成jar更好
不过最后一步就换成【Add Li…
[/Quote]
....................楼主基础很重要…………
回复

使用道具 举报

0

主题

4

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-29 10:15:01 | 显示全部楼层
应该不行吧?
同志们,有包类是没办法直接调用无包类的,因为无包类是放在一个隐蔽的命名空间里,
不知道能不能使用反射的方式调用呢。
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-8-29 10:30:01 | 显示全部楼层
用JAR最好!!!
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-29 10:45:01 | 显示全部楼层
楼上说可以做到的 不知有没有自己试验过
我是没有办法做到在自己的包里像正常一样调用匿名包里的类
不过如果是简单调用可以尝试自己实现一个Class Loader,将
匿名包里的类加载,用Java reflect机制实例化成一个
java.lang.Object对象,再用reflect机制调用这个对象的方法。

声明:这个方法我没有实验过,估计可以奏效,楼主有兴趣可以
一试。

如果哪位有办法做到像通常一样访问匿名包里的类,请在这里
回帖,我也正为此时苦恼:-(
回复

使用道具 举报

0

主题

4

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-29 11:00:02 | 显示全部楼层
使用反射果然可以。不过超级麻烦啊,你还不如写到无包类里呢。

假设有一个无包类需要调用:


[code=Java]public class Main {
    public void hello() {
        System.out.println("hello");
    }
}[/code]


使用反射调用这个无包类的hello()方法:


[code=Java]package hello;

import java.lang.reflect.*;

public class Hello {
    public static void main(String[] args) throws Exception {
        Class clazz = Class.forName("Main");
        Object o = clazz.newInstance();
        Method m = clazz.getDeclaredMethod("hello");
        m.invoke(o);
    }
}[/code]
回复

使用道具 举报

0

主题

4

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-29 11:15:01 | 显示全部楼层
别苦恼了,还是因为java的安全机制防止类的混用。
jdk-1.3之前允许用一个什么defaultnamespace的特殊引用方法调用无包的类。
但是这个用法马上就取消了,估计是看这种写法太恶心了。

如果允许直接使用无包类,那么import怎么写啊?
你想啊。要是一个没有包的类可以直接调用,那就不用写import就可以直接用了呗,因为它本来就没有包名啊

像我这种做测试满地写Test.java的人, classpath一旦设多了,jvm知道到底要用哪个Test.java?你想找错都没处调试去。

这种情况下,反射属于奇技淫巧,应该去厂商要一份带包的类才好,用反射,万一厂商以后升级修改了api,你就会很麻烦。所有部分都要重写。


回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-29 11:30:01 | 显示全部楼层
编译不通过,就是*.class文件路径不对头。好好组织下包结构
回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-8-29 12:00:01 | 显示全部楼层
classpath,classpath,classpath
回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-8-29 12:15:01 | 显示全部楼层
在你想放的地方做一个目录,然后把厂家的class都放在这个目录里,然后把这个目录加到classpath里去。
如果你是用eclipse的话,也有一个add folder的选项可以进行添加!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表