抽象基本クラスを作成しました。これには、サブクラスによって拡張される必要があるオブジェクトが含まれています。
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のリストの汎用コンパレーターを考えています。