2015-01-21 3 views
0

일부 메소드에 대한 인스턴스화 하위 클래스에 대한 참조를 저장해야하는 상위 클래스가 있습니다. 이렇게하려면 부모 클래스의 생성자에 제네릭을 적용합니다.자체 클래스를 상위 제네릭에 전달

public abstract class Parent<T> { 
    Class<T> clazz; 

    public Parent(Class<T> clazz) { 
     this.clazz = clazz; 
    } 
} 

하위 클래스에서 동일한 일반 자식 유형을 적용한 상위 클래스를 확장합니다.

public class Child extends Parent<Child> { 
    public Child() { 
     super(Child.class); 
    } 
} 

다른 사람에게 이상하게 보입니까? 나는 자식 클래스가 너무 불필요하다고 느낍니다. 호출 클래스와 같은 유형 인 생성자와 제네릭에서 동일한 유형을 다시 사용하기 때문에.

+0

이 패턴은 일반적으로 제네릭과 함께 사용됩니다. 물론 실제 질문은 왜 이런 수업이 필요한지입니다. 레이어링 위반 일 수 있습니다. – eckes

+1

나에게 잘 어울린다 – shmosel

답변

-2

자식 클래스를 만들 때 상위를 요청하지 않으므로 부모 개체를 확장하는 것만으로도 나에게 이상한 느낌이 들지 않지만 원하는 영향을주지는 못합니다.

이 문제를 해결하려면 부모 클래스를 자식 클래스의 매개 변수로 사용해야합니다.

이와 비슷한 것;

public class Parent{ 
//Put something here to keep track of the children 
//You could use a HashMap, or an ArrayList 
private ArrayList<Child> children = new ArrayList<Child>(); 
    public void registerChild(Child child){ 
      children.add(child); 
    } 
} 

public class Child { 
    public Child(Parent parent) { 
     parent.registerChild(this); 
    } 
} 
+0

OP의 의도에 대해 많은 상상을하고있는 것 같습니다. – shmosel

+0

공정한, 주어진 코드는 OP가 원했던 것을 할 것이지만, 내가 말했듯이, 내가 알고있는 것 (거대하지 않은 것으로 인정된다)에 OP 코드는 그것을 호출 한 부모를 다시 호출하지 않을 것이다. 그것은 확장하고있는 부모의 새로운 객체를 생성합니다. 따라서 자식 클래스는 부모와 자신을 등록 할 수 없습니다. –

관련 문제