我創建了一個抽象基類。它包含應該由任何子類擴展的對象:抽象類與抽象字段和子類化沒有鑄造
public abstract class AbstractParent {
protected AbstractObject subMePlz;
// ... some fields that all subclasses need
public AbstractParent() {
this.subMePlz = createThisInYourExtendedClass();
}
public abstract AbstractObject createThisInYourExtendedClass();
}
的abstractObject:
public abstract class AbstractObject {
// ... some fields/methods that all subclasses need
}
我要的是能夠使用擴展字段中擴展類無鑄造:
public class ExtendParent extends AbstractParent {
// .. some unique fields
public ExtendParent(){
super();
}
public ConcreteObject createThisInYourExtendedClass(){
return new ConcreteObject();
}
// what I want to do - no cast
public void doSomethingWithSubMePlzWithoutCastingIt() {
System.out.println(this.subMePlz);
}
// what I end up doing - gotta cast
public void doSomethingWithSubMePlzWithoutCastingIt() {
System.out.println((ConcreteObject)this.subMePlz);
}
}
需要一個比較器改變我應該如何實現這個? - 我正在考慮一個通用的比較器,用於其子類可以使用的AbstractObjects列表。
對於選項1會是抽象的T getSubMePlz()? – gebuh 2012-04-24 17:54:41
選項1根本不涉及任何泛型,但我想你可以將兩者結合起來。 – 2012-04-24 18:00:15