2

假设我们有一个基类:

package mobi.hsz.app.plugin;
abstract class Plugin {}

和扩展类:

package 3rd.party.plugin;
ThirdPartyPlugin extends Plugin {}

是否可以在基类中获取扩展类的包名?

我必须进入我的抽象类简单字符串

3rd.party.plugin
4

3 回答 3

5

一点反射代码应该在这里工作:

getClass().getPackage().getName()

getClass()方法获取Class实例getPackage()的对象,获取Package对象,并getName()返回完全限定的包名称。

ClassJava 的多态性将确保ThirdPartyPlugingetClass().

于 2013-07-29T22:25:56.460 回答
1

这是不可能的。一个类不知道它的子类,也不应该有它。

另外,正如@hexafraction 指出的那样:如果有多个子类怎么办?

于 2013-07-29T22:33:54.583 回答
0

听起来您确实想要所有子类。

如果是这样,让您的超类知道所有子类的实现都很难闻 - 它违反了开放封闭原则

您需要一种间接方法来获得这些 - 对于标准 Java 解决方案,请尝试SPI,然后您的 Base 类可以动态查找它们,而无需使用ServiceLoader进行耦合。

否则,如果您使用的是 OSGi 之类的良好支持框架,那么您只需注册插件即可。

于 2013-07-29T22:32:24.203 回答