获取扩展类的包名称

时间:2013-07-29 22:24:01

标签: java package

假设我们有一个基类:

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

扩展课程:

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

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

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

3rd.party.plugin

3 个答案:

答案 0 :(得分:4)

这里应该有一点反射代码:

getClass().getPackage().getName()

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

Java的多态性将确保从Class返回正确的ThirdPartyPlugin对象(此处为getClass())。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

听起来你真的想要所有子类。

如果让你的超类知道所有子类实现闻起来很糟糕 - 它违反了Open Closed Principle

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

否则,如果您正在使用像OSGi这样的支持框架,那么您只需注册插件即可。