假设我们有一个基类:
package mobi.hsz.app.plugin;
abstract class Plugin {}
和扩展类:
package 3rd.party.plugin;
ThirdPartyPlugin extends Plugin {}
是否可以在基类中获取扩展类的包名?
我必须进入我的抽象类简单字符串
3rd.party.plugin
一点反射代码应该在这里工作:
getClass().getPackage().getName()
该getClass()
方法获取Class
实例getPackage()
的对象,获取Package
对象,并getName()
返回完全限定的包名称。
Class
Java 的多态性将确保ThirdPartyPlugin
从getClass()
.
这是不可能的。一个类不知道它的子类,也不应该有它。
另外,正如@hexafraction 指出的那样:如果有多个子类怎么办?
听起来您确实想要所有子类。
如果是这样,让您的超类知道所有子类的实现都很难闻 - 它违反了开放封闭原则。
您需要一种间接方法来获得这些 - 对于标准 Java 解决方案,请尝试SPI,然后您的 Base 类可以动态查找它们,而无需使用ServiceLoader进行耦合。
否则,如果您使用的是 OSGi 之类的良好支持框架,那么您只需注册插件即可。