2012-10-24 2 views
3

가능한 중복 parameteres 때 일반적인 클래스 인스턴스를 만들기 :
How to create instance of a class with the parameters in the constructor using reflection?생성자 초기화가

이 일이 어떻게 가능한가를?

public class TestGenerics<T> { 
    private Class<T> mClass; 

    public TestGenerics(Class<T> cls){ 
     mClass = cls; 
    } 

    public T get(){ 
     try{ 
      return mClass.newInstance(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
      return null; 
     } 
    } 
} 

그리고 main 클래스 :

public class HelloWorld { 
    public static void main(String[] args) { 
     TestGenerics<Gerbil> g = new TestGenerics<Gerbil>(Gerbil.class); 
     Gerbil a = g.get(); 
     a.hop(); 
    } 
} 

문제는 내가 생성자를 제공 할 필요가있다

public class Gerbil { 
    private int gerbilNumber; 
    public Gerbil(int gn){ 
     this.gerbilNumber = gn; 
    } 
    public void hop() { 
     System.out.println("It's gerbil number" + this.gerbilNumber + "and it's hopping."); 
    } 

} 

내가 제네릭 클래스 TestGenerics 있습니다 I 클래스 GerbilGerbil은 정수 값을 갖지만 how (가능한 경우)를 모릅니다. 그렇지 않으면 빈/기본 생성자를 남겨두면 코드가 정상적으로 작동하지만 실제 클래스 생성자가 매개 변수를 전달해야 할 때 인스턴스 폼을 일반 클래스로 만들 수 있습니까?

답변

8

이 시도 :

public T get(){ 
    try{ 
     return mClass.getDeclaredConstructor(Integer.TYPE).newInstance(10); 
    }catch(Exception e){ 
     e.printStackTrace(); 
     return null; 
    } 
} 
+0

한 2 초 빨리 나보다. nice :) – ppeterka

+0

가끔은 경쟁 조건처럼 보입니다. 특히'erlang '과 반대되는'java'와 같은 영역에서 보입니다. 예를 들어, – stemm

+0

입니다. 고맙지 만 이것은 잘 작동하고 있습니다. 숫자와 generic 클래스를 작성할 때 실제 클래스의 생성자가 필요로하는 매개 변수의 유형 두 개의 다른 생성자 또는 다른 시나리오가있는 경우 다른 생성자에 대해 서로 다른 일반 클래스를 작성해야합니까? – Leron

관련 문제