2014-07-10 4 views
2

클래스에 제네릭 인터페이스를 구현하고 싶습니다. 이 일반적인 인터페이스 구현 고려 :제네릭 클래스가 아닌 일반 인터페이스 구현

public interface Lookup<T>{ 
    public T find(String name); 
} 

을하고이 조회 구현 일반적인하지 클래스 :

public class IntegerLookup implements Lookup<Integer>{ 
    private Integer[] values; 
    private String[] names; 

    public IntegerLookup(String[] names, Integer[] values) {......} 
    //now I want to write the implemented method - find 

을 내 질문은 : 내가 이것을 쓸 필요가 어떻게 구현 된 방법? 재정의해야합니까? 예?

public Object find(String name){...} 

이 좋을까요? 나 :

public Integer find(String name){...} 
+3

어디에서나 슈퍼 타입에서'T'가 사용되고'T'의 타입 인자로 Integer를 사용하는 서브 클래스에서'Integer'를 사용해야합니다. –

+0

왜 @Override 주석으로 시도 할 수 없습니까? – Ordous

+0

@SotiriosDelimanolis하지만 슈퍼 유형으로 T가 아니라 오브젝트가 작성되었습니다 ... 또는 잘못 되었습니까? –

답변

3

당신이 여기처럼 당신은 형식 인수를 제공 할 때

public class IntegerLookup implements Lookup<Integer>{ 
//           ^

당신이 유형 선언하는 형식 변수에 제공된 유형을 구속력을하고 있습니다. 그래서 IntegerT에 바인딩됩니다.

따라서는,

public Integer find(String name){...} 

이것은 당신이 정말 반환 형식으로 Object을 사용하려는 것처럼 소리 의견에서

Lookup<Integer> lookup = ...; 
lookup.find("something"); // has a return type of Integer 
+0

ok하지만 이해할 수 없었습니다. 공용 객체 find (String name)? –

+1

@YuvalLevy 코드에서이를 시도하면 어떻게됩니까? –

0

을하는 것과 동일합니다. 왜 그렇게하고 싶은지 상상할 수는 없지만 실제로 그렇다면 Lookup<Integer>이 아니라 Lookup<Object>을 구현해야합니다.

하지만 그렇게하지 마십시오. 구현시 T에 해당 유형이 있으므로 반환 유형으로 Integer을 사용하십시오.

관련 문제