2012-07-07 2 views
3

자바 그래프 라이브러리를 구현 중이 었습니다. 따라서, 인터페이스를 작성했습니다.Java - Object 인수를 사용하여 인터페이스 구현

구현을위한 첫 번째 단계로 위의 인터페이스를 구현하는 Digraph 클래스를 작성했습니다. 그러나 간단하게하기 위해, 나는 무시하거나 상위 유형과 방법을 구현해야한다는 오류를 얻고있다, 나는 정수로 노드 식별자를 원하는, 그래서

@Override 
    public boolean isAdjacent(int v, int w) { 
      // TODO Auto-generated method stub 
      return adjList[v].contains(w) || adjList[w].contains(v); 
    } 

등의 기능을 정의하지만. 누군가이 동작에 대한 토대를 설명 할 수 있습니까? 또한 누군가가 설명 할 수 있다면 어떤 유형의 구성 요소를 융통성있게 추가 할 수있는 라이브러리를 어떻게 설계 할 것인가?

+0

'int'가'Object'가 아니더라도, 구현은 인터페이스보다 덜 약속 할 수 없습니다. 인터페이스는 이미 ** 모든 ** 객체를 처리 할 것을 약속합니다. –

+0

그럼, 어떻게해야합니까? 나는 문자열을 가지고 노드를 식별하는 또 다른 클래스를 구현하고자 할 때 인터페이스를 변경할 필요가 없다. – Code4Fun

답변

5

사용자 인터페이스는 말한다 :

public boolean isAdjacent(Object v, Object w); 

당신이 구현 : 자바에 대한

public boolean isAdjacent(int v, int w) 

이 때문에, 동일하지 서명이 같은 방법은 아닙니다. 구현 될 수

public interface DigraphInterface<T> { 
    ... 
    public boolean isAdjacent(T v, T w); 
    ... 
} 

과 : 물론

public class DefaultDigraph<Integer> { 
    ... 
    public boolean isAdjacent(Integer v, Integer w) { 
     ... 
    } 
    ... 
} 

당신이 필요로하는 당신이 할 수있는 것은 당신이 뭔가를 할 수있다이 경우에, 당신이 필요에 따라 다르지만, 제네릭을 사용하는 것입니다 Integer은 null 일 수 있고 int이 아니기 때문에주의해야합니다. 따라서 매개 변수에 대한 null 검사는 자동 언 박싱 전에 좋은 아이디어입니다.

+0

메소드에 int를 전달할 때 Java는 필요한 경우 int를 자동으로 Object로 변환한다는 것을 알고있었습니다. int 인수를 가진 메서드를 찾지 못하면 Object 인수가있는 메서드에 바인딩해야합니다. 그것이 내가 생각했던 거죠. – Code4Fun

+1

예, 메소드를 호출 할 때 매개 변수는 WrapperClass에 상자가 지정됩니다.이 경우에는 Integer이지만, 메소드 구현시 서명 **은 동일해야합니다. 따라서 이것은 작동하지 않습니다 :'public boolean isAdjacent (int v, int w)'. 알았어? –

+0

OK, 나를 설명 해주신 Francisco 께 감사드립니다. 이것을 달성하기 위해 제네릭을 사용할 것입니다. 내 목표는 다른 방법으로 노드를 식별 할 수있는 하나의 인터페이스와 여러 구현을 사용하는 것이 었습니다. – Code4Fun