假设我们有一个基类:
package mobi.hsz.app.plugin;
abstract class Plugin {}
扩展课程:
package 3rd.party.plugin;
ThirdPartyPlugin extends Plugin {}
是否可以在基类中获取扩展类的包名?
我必须进入我的抽象类简单字符串
3rd.party.plugin
答案 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这样的支持框架,那么您只需注册插件即可。