2014-02-05 3 views

답변

1

이것은 단지 여분의 비트의 정보를 제공하고, 코멘트에서 귀하의 질문에 대답하는 것입니다. Kayaman의 대답은 귀하의 질문에 제공된 정보를 바탕으로 제가 제안한 것입니다.

그러나 주석 질문에 암시했듯이이 메서드는 기본 생성자 만 호출합니다. 매개 변수화 된 생성자 중 하나를 호출하려면 getDeclaredConstructor 메소드를 사용하여 서명을 통해 효과적으로 "위치 지정"해야합니다. parametersparameterTypes 요소의 순서는 생성자의 서명에 해당하는 과정을 잘 만들기

public abstract class AbstractClass { 
    public AbstractClass getInstance(Object[] parameters, Class<?>...parameterTypes) { 
     return getClass().getDeclaredConstructor(parameterTypes).newInstance(parameters); 
    } 
} 

: 그래서 (Kayaman의 대답에서 차입)처럼

.

3

다음과 같은 방법으로 클래스를 인스턴스화 할 수 있지만 달성하려는 내용을 알려야 할 수도 있습니다. 또 다른 간단한 방법은 아마도 Clonable을 구현하는 것입니다.

public abstract class AbstractClass { 
    public AbstractClass getInstance() { 
     return getClass().newInstance(); 
    } 
} 

또는 생성자 받아들이는 매개 변수의 경우

는 :

return getClass().getDeclaredConstructors(String.class, Integer.class).newInstance(someString someInteger); 
+0

추상 클래스에 인수를 사용하는 생성자가있는 경우에는 어떨까요? 구현 클래스가 반드시 super (arg1, arg2)를 수행 할 것이므로 위와 함께 전달할 수 있습니까? – user3236409

+0

생성자에 대한 업데이트 중 ... – Kayaman

관련 문제