我需要添加到子属性列表(ProductOption 和 ProductAttribute)中,这些子属性是名为 Product 的父对象的属性。这三个类都扩展了一个抽象类 CMS。
我想一般地调用方法“attachChildToParent”,但我通过推迟instanceof
和强制转换到产品来延迟不可避免的事情。
有没有办法我可以通用地写这个,这样我就可以避免演员表?
去测试:
package puzzler;
import java.util.ArrayList;
import java.util.List;
public class Tester {
public static void main(String[] args) {
Product p = new Product();
ProductAttribute pa = new ProductAttribute();
ProductOffering po = new ProductOffering();
List<ProductAttribute> lpa = new ArrayList<ProductAttribute>();
List<ProductOffering> lpo = new ArrayList<ProductOffering>();
attachChildToParent(lpa, p);
}
static void attachChildToParent(List<? extends CMS> listChild, Product parent) {
for (CMS cmsItem : listChild) {
parent.attach(cmsItem);
}
}
}
产品类(父)
package puzzler;
import java.util.List;
abstract class CMS {
String node;
}
public class Product extends CMS {
List<ProductAttribute> lpa;
List<ProductOffering> lpo;
public List<ProductAttribute> getLpa() {
return lpa;
}
public void setLpa(List<ProductAttribute> lpa) {
this.lpa = lpa;
}
public List<ProductOffering> getLpo() {
return lpo;
}
public void setLpo(List<ProductOffering> lpo) {
this.lpo = lpo;
}
public void attach(ProductAttribute childNode) {
this.getLpa().add(childNode);
}
public void attach(ProductOffering childNode) {
this.getLpo().add(childNode);
}
// I want to avoid this. Defeats the purpose of generics.
public void attach(CMS cms) {
if (cms instanceof ProductOffering) {
this.getLpo().add((ProductOffering) cms);
} else {
if (cms instanceof ProductAttribute) {
this.getLpa().add((ProductAttribute) cms);
}
}
}
}
儿童班 1
package puzzler;
import puzzler.CMS;
public class ProductAttribute extends CMS {
String node;
public String getNode() {
return node;
}
public void setNode(String node) {
this.node = node;
}
}
儿童班 2
package puzzler;
import puzzler.CMS;
public class ProductOffering extends CMS {
String node;
public String getNode() {
return node;
}
public void setNode(String node) {
this.node = node;
}
}