1

私は以下のオブジェクトを持っています

interface Adapter<T> {
      T fromXml(XML xml);
      XML toXml(T obj); //ignoring this in implementations
}

abstract class AbstractAdapter<T> implements Adapter<T>{
       T fromXml(XML xml) { //template method
         validate(xml);
         return parse(xml);
       }
       abstract void validate(Xml xml);
       abstract T parse(Xml xml);
}

class MyObjectAdapter extends AbstractAdapter<MyObject> {
       MyObject parse(XMl xml) {return null;}
       void validate(Xml xml) {}
}

class AnotherObjectAdapter extends AbstractAdapter<AnotherObject> {
       AnotherObject parse(XMl xml) {return null;}
       void validate(Xml xml) {}
}

class AdapterFactory {
      Adapter<?> createAdapter(String objectType) {
         if (objectType == "MyObject") return new MyObjectAdapter();
         if (objectType == "AnotherObject") return new AnotherObjectAdapter();
}

public static void main(String args[]) {
      AdapterFactory factory = new AdapterFactory();
      //********
      Adapter<MyObject> myobjectAdapter = (Adapater<MyObject>) factory.createAdapter("MyObject");
      MyObject obj = myobjectAdapter.fromXml(getXml(args)); 
}

上記の* *とマークされた行で行っているダウンキャストを回避するにはどうすればよいですか? アダプターが必要なオブジェクトは、それらの間に何の関係もありません。それらは汎用データ オブジェクトです。

4

1 に答える 1

1

にクラス名がありString、それから実際のタイプに移動しようとしています。それは常にキャストを伴います。を削除するAdapterFactoryと、String問題はありません。

==(通常、 onStringは通常、必要なものではないことに注意してください。)

于 2012-08-02T19:41:52.103 に答える