今日も同様の質問をしましたが、要件が変更されたと言われました。
(PO) と(POL)Product
の3 つのクラスがあります。製品には PO が含まれ、PO には POL が含まれます。これらのクラスはすべて、CMS と呼ばれる抽象クラスを拡張します。ProductOffering
ProductOfferingLists
PO を P に、POL を PO に付けたいのですが、クラス名を除いてロジックが同じであるため、再利用可能なメソッドを探しています。
残念ながら、私のテスター クラスには 2 つのメソッドが必要であり、階層クラスには抽象 CMS コントラクトを満たすためにキャストが必要です。
これは私を夢中にさせています。複数のメソッドとキャストを使用しないように、これをより再利用可能にするにはどうすればよいですか?
package puzzler;
import java.util.ArrayList;
import java.util.List;
public class Tester {
public static void main(String[] args) {
Product p = new Product();
PO pa = new PO();
POL po = new POL();
List<PO> lpa = new ArrayList<PO>();
List<POL> lpo = new ArrayList<POL>();
attachChildToParent(lpa, p);
attachChildToParent(lpo, pa);
}
static void attachChildToParent(List<PO> listChild, Product parent) {
for (PO po : listChild) {
parent.attach(po);
}
}
static void attachChildToParent(List<POL> listChild, PO parent) {
for (POL po : listChild) {
parent.attach(po);
}
}
}
CMS クラス:
package puzzler;
abstract class CMS {
abstract void attach(CMS childNode);
}
製品クラス - PO を所有する階層の最上位:
package puzzler;
import java.util.List;
public class Product extends CMS {
List<PO> lpo;
public List<PO> getLpo() {
return lpo;
}
public void setLpo(List<PO> lpo) {
this.lpo = lpo;
}
@Override
void attach(CMS childNode) {
this.getLpo().add((PO)childNode);
}
}
製品によって所有され、製品提供リストを所有する製品提供
package puzzler;
import java.util.List;
public class PO extends CMS {
List<POL> lpol;
public List<POL> getLpo() {
return lpol;
}
public void setLpo(List<POL> lpol) {
this.lpol = lpol;
}
@Override
void attach(CMS childNode) {
this.getLpo().add((POL)childNode);
}
}
PO が所有する製品提供リスト (POL)
package puzzler;
public class POL extends CMS {
@Override
void attach(CMS childNode) {
throw new UnsupportedOperationException("Not supported yet.");
}
}