2012-02-26 11 views

答えて

4

タイプTのオブジェクトを作成することはできません。

常にSoapObjectToModel<MyAbstractClass>があることを覚えておいてください。Tを作成しようとするとどうなりますか?抽象クラスを作成しますか?回避策として

、あなたは、パラメータとしてタイプTの要素を渡したい、そして新しいオブジェクトを作成するためにreflectionを使用するか、またはより良いかもしれない - として、工場出荷時のパターンを使用してFactory Design Pattern

+0

downvotersはコメントする気になりますか? – amit

+0

これはjavaのリフレクションで行うことができます。あなたの例の場合では、例外がスローされますが、一般には – Tim

+0

@Timが可能です:どのようにT ' 'のconcreatオブジェクトなしでそれを行うことができ、あなたがインスタンスを持っている必要があります - そして、あなたはそれを行うことができます - Iとしてまたは工場パターンを使用してください – amit

1

を見てamitによって提案されているのは、この問題に対する非常に優れた解決策であり、動作することが保証されている一般的な解決策でもあります。しかしながら、反射を使用することの推奨される代替は、場合によってはより容易であり得る。これは、特定のケースで反射がどのように使用されるかの実例です:

class SoapObjectToModel<T> { 

    private Class<T> type; 

    public SoapObjectToModel(Class<T> type) { 
     this.type = type; 
    } 

    public ArrayList<T> convert(SoapObject soapObject) { 

     try { 
      ArrayList<T> result = new ArrayList<T>(); 
      result.add(type.newInstance()); 
      return result; 
     } catch (InstantiationException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 
} 
関連する問題