2012-02-26 5 views

답변

4

T 유형의 개체를 만들 수 없습니다.

언제나 SoapObjectToModel<MyAbstractClass>을 가질 수 있으며, T을 만들려고하면 어떻게 될까요? 그것은 추상 클래스를 만들 것입니까?

해결 방법으로

, 당신은 더 나은 매개 변수로 유형 T의 요소를 전달하려면, 새로운 개체를 만드는 reflection를 사용하거나, 수 - Factory Design Pattern

+0

downvoters가 신경 쓰겠습니까? – amit

+0

자바 리플렉션으로이 작업을 수행 할 수 있습니다. 귀하의 예제의 경우는 예외가 발생합니다,하지만 일반적으로이 가능합니다 – Tim

+0

@ 팀 : 당신이 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; 
    } 
} 
관련 문제