2014-10-01 3 views
1

여기에 내 시나리오가 있습니다. 3 가지 클래스가 있습니다.부모 클래스와 하위 클래스에 대해 동일한 메서드에서 일반 형식

class Animal { 
    public getWeight(){ ..... } 
    public getHeight(){ ..... } 
} 

class Dog extends Animal { 
    public getDogType() { ...} 
} 

class Cat extends Animal { 
    public getCatType(){....} 
} 

그리고 매개 변수 여기

public Animal translate(CustomObject o){ 
    ... so many calculations here 
} 

방법은 동물 개체를 반환 번역으로 Object를 복용 동물 유형을 반환하는 다른 방법이있다,하지만 난 개를 반환하기 위해 같은 방법을 사용할 필요 typecasting도 고양이 유형. 여기에 제네릭을 사용해야한다는 것을 알고 있지만 Generics를 지원하는 번역 메서드를 편집하여 클래스 형식을 해당 매개 변수에 전달할 수 있으며 Animal 매개 변수와 Dog를 사용하여 호출 한 경우 Cat 매개 변수와 Animal 개체를 사용하여 호출 한 경우 Cat 개체를 반환합니다. Dog 매개 변수를 사용하여 호출 된 경우 개체.

예 : - Cat newCat = translate(object, Cat.class); //should return cat object and not animal obj 대신

(Cat.class, 객체) 번역

고양이 newCat = (고양이)의 감사합니다.

+0

왜 형 변환이 필요하지 않습니까? – jordanpg

답변

1

시도 public <T extends Animal> translate(CustomObject o, Class<T> clazz). 당신은 서브 클래스가 자신의 구현을 처리 할 수 ​​있도록 translate() 추상적 만드는 고려할 수 있습니다

class Animal<T extends Animal<T>> { 
    public getWeight(){ ..... } 
    public getHeight(){ ..... } 
    public T translate(CustomObject o){ 
    //... so many calculations here 
    } 
} 

class Dog extends Animal<Dog> { 
    // 
} 

class Cat extends Animal<Cat> { 
    // 
} 

:

+0

답변 해 주셔서 감사합니다 – abat

1

당신은 바인딩 자체 참조가 필요합니다.

+0

답장을 보내 주셔서 감사합니다 – abat

+0

np. 참고로, 다른 대답은'Dog' 객체에서'Cat'을 반환 할 수있게 해줍니다. – Bohemian

관련 문제