【发布时间】:2020-09-18 01:54:13
【问题描述】:
有没有办法在不使用字符串的情况下在代码中引用 java 中的包?
让我解释一下自己:
我有一个函数可以获取包中包含的所有对象,但我必须使用字符串来引用该包,比如说“com.google.guava”。但是,如果我更改了包名称,IDE 将无法自动重构引用,或者如果包是外部的并且在主要版本更改后消失,则在编译时不会检测到它。
对于类,我会尽可能直接使用 Class 对象,或者如果我需要的是表示类的 FQDN 的字符串,我会使用 Class#getName,但我不知道是否有办法使用包。
有时我只是这样做
Class<?> clazz = Foo.class;
Package p = clazz.getPackage();
这更像是一个好奇而不是真正的问题,我通常只是通过 String 引用并编写一个 junit 测试以检测这种方式使用的 nom-existant 包
【问题讨论】:
-
Foo.class.getPackage()已经是你能得到的最好的了。但是“包含在一个包中的所有对象”是没有意义的。包包含类,而不是对象。 -
@Holger 好吧,我得到了配置文件和其他东西,我知道它们在概念上不在包中(关于 Java),但它们在同一个目录中,包就是这样我用来查找文件夹。英语不是我的母亲语言,我想让帖子尽可能简单。我的函数返回所有 java 属性文件、xml 配置和类(它用于代码生成器,该函数获取现有生成的文件以更新它们。我知道它们应该在特定的资源文件夹中,但我继承了糟糕的项目结构:()。这个问题主要是好奇
-
我不认为资源必须在特定的资源文件夹中。但是,如果您的意思是“资源”,则不应该说“对象”。当您想要访问资源时,获取
Package对象是没有意义的,因为Package类不提供任何资源查找功能。Package类仅用于允许访问元信息。无论如何都必须通过Foo.class.getResource(…)访问资源。遍历所有资源的标准方法是to open a filesystem。
标签: java reflection package