2015-01-17 4 views
1

나는이 클래스의보다 특수화 된 버전을 생성하는 UI 및 하위 클래스를 생성하는 일반 클래스를 사용합니다. 그 슈퍼 클래스는 일반적으로 여러 위치에서 호출되기 때문에 기본적으로 수퍼 클래스가 호출을 처리하거나 자식 클래스에 전달해야하는 수퍼 클래스 날씨를 결정해야합니다.생성자가 다른 클래스에 호출을 전달합니다.

public class AddEntryWindow<T extends SomeUiClass> 
{ 

    public AddEntryWindow(TableDefinition tableDefinition, RefreshListener refreshListener) 
    { 
     // regular init stuff 

     if(T == PartUiClass) // I know this doesn't work like this 
     { 
      return new AddPartWindow(tableDefinition, refreshListener); 
      // I know this doesn't work either. 
     } 
    } 
} 


public class AddPartWindow extends AddEntryWindow<PartUiClass> 
{ 

    public AddPartWindow(TableDefinition tableDefinition, RefreshListener refreshListener) 
    { 
     // (usually super would have to be called here) 

     //special init stuff 
    } 
} 

호출은 다음과 같습니다

new OpenBlockingWindowHandler(scene, new AddEntryWindow<T>(TableDefinitionGenerator.getTableDefinitionByClass(elementToSelect), this))); 

자바에서 어떻게 든 가능 이러한 구조인가? 생성자가 다른 클래스 인스턴스를 "반환"하도록 할 수 있습니까?

답변

0

Java에서 이러한 구성이 어떻게 가능합니까? 그것은 어떻게 든 생성자가 다른 클래스 인스턴스를 "반환"하도록 허용하는 것입니까 입니까?

아니요. 생성자는 절대로 다른 클래스의 인스턴스를 반환 할 수 없습니다. 실제로 을 생성자에 return 문을 추가하면 Java에서 구문 오류로 간주됩니다.

문제는 슈퍼 클래스도 그래서 기본적으로 나는 슈퍼 클래스에서 결정해야 슈퍼 클래스가 아이에게 전화를 처리하거나 "에 을 건네"의 날씨 것, 여러 위치에서 일반적으로 불리는 것이있다 수업.

형식 매개 변수의 런타임 클래스를 인수로 사용하는 정적 팩터 리 메서드를 클래스에 추가 할 수 있습니다. 다음과 같은 내용 :

public static <T extends SomeUiClass> AddEntryWindow<T> createAddEntryWindow(TableDefinition tableDefinition, RefreshListener refreshListener, Class<T> c){ 
    if(PartUiClass.class.isAssignableFrom(c)){ 
     return (AddEntryWindow<T>) new AddPartWindow(tableDefinition, refreshListener); 
    } 
    return new AddEntryWindow<>(tableDefinition, refreshListener); 
} 
관련 문제