2017-04-06 3 views
0

개체 형식을 매개 변수로 허용 할 수있는 메서드를 만들고 싶습니다.이 메서드는 다른 개체를 인스턴스화하는 데 사용할 수 있습니다.메서드 인수로 일반 형식

예를 들어, 방법에 유형 String 전달하고, 메소드 본문 내에서, 나는이 일을 가야합니까 어떻게

List<String> l = new ArrayList<String>(); 
String s = new String("abc"); 

합니까?

편집 :

How to have Java method return generic list of any type? 내 질문의 첫 부분에 대답 않습니다.

위의 코드 조각의 두 번째 줄처럼 메서드 본문 내에 전달 된 형식의 인스턴스를 만들 수 있습니까?

+0

Java의 제네릭에 대한 자습서가 많이 있습니다 ... 적어도 하나는 시도해 보셨습니까? – Tom

+0

제네릭을 사용하는 코드를 구현하는 데 도움이되는 몇 가지 자습서를 읽었습니다. 불행히도, 나는이 특별한 문제를 파악할 수 없다. 가능한 경우 링크를 높이 평가할 것입니다. – user1889776

+0

제네릭을 배웠다면 배워야 할 첫 번째 것들 중 하나는 실행시 제네릭 타입이 존재하지 않기 때문에 제네릭 타입으로 'new'를 호출 할 수 없다는 것입니다. – RealSkeptic

답변

1

제네릭과 함께 사용하기위한 메커니즘이 없습니다. 그것을 얻기 위해 반성을 사용해야합니다.

public <T> T instantiator(Class<T> c){ 
    if (c != null){ 
     try { 
      return (T) c.getConstructor().newInstance(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    return null; 
} 

그러나 신중하게 사용하지 않으면 반사가 실패 할 수 있습니다. 방금 작성한이 메서드는 클래스에 매개 변수가없는 생성자가 있으면 제대로 작동합니다. 예를 들어 instantiator(String.class);instantiator(Exception.class);은 빈 생성자가 있지만 instantiator(Integer.class)이 실행되지 않으므로 제대로 작동합니다.

+0

@Tom이 위에 링크되어있는 SO 질문은 내 질문의 첫 번째 부분에 대한 대답이므로 두 번째 부분에 대답합니다. – user1889776

관련 문제