【发布时间】:2024-05-01 06:50:03
【问题描述】:
当所有涉及的类都在同一个项目中(determineSubClass 是BaseClass 的成员)时,以下代码运行良好:
protected static BaseClass determineSubClass(String p1, int p2, Boolean p3) {
BaseClass baseObj = null;
if ( (baseObj = SubClassOne.ofType(p1, p2, p3)) != null )
return baseObj;
else if ( (baseObj = SubClassTwo.ofType(p1, p2, p3)) != null )
return baseObj;
else if ( (baseObj = SubClassThree.ofType(p1, p2, p3)) != null )
return baseObj;
else if ( (baseObj = SubClassFour.ofType(p1, p2, p3)) != null )
return baseObj;
else
return new SubClassDefault(p1, p2, p3);
}
但是现在,我想将BaseClass 移动到共享库项目中,其中SubClassOne、SubClassTwo、SubClassThree 和SubClassFour 在库中没有定义而是在使用这个库的应用程序中。
我当然可以将BaseClass 移回使用该库的每个应用程序,但我想知道:
- 有更好的解决方案吗?
- 有没有一种解决方案可以让我
将
BaseClass保存在库中 项目并消除对它的需要 了解所有超类 来源于它?
编辑(回答下面的@ahmet alp balkan 问题):
每个子类的ofType() 做了两件事:
- 根据内容确定 字符串 p1 和其他参数 p2 和 p3,是否为子类 被实例化是 its 类型。
- 如果答案是肯定的,它 实例化一个 self 的对象 子类。否则,返回 null。
至于你的第二个问题,BaseClass 在这一点上拥有所有子类的公共数据成员和方法,并且只有这个单一的静态方法,旨在委派确定要实例化的子类的责任。
顺便说一句,多亏了你的问题,我注意到我原来的帖子中有一个可怕的错字:“SuperClassOne”应该是“SubClassOne”等等。
【问题讨论】:
-
ofType方法是做什么的,你能给我们BaseClass的定义吗?我无法在此处了解您想要实现的目标。 -
@ahmet alp balkan 请参阅上面的编辑。感谢并 +1 指出我的问题中不清楚的部分。
标签: java dependency-injection dependency-management library-project class-factory