2013-07-03 6 views
5

전체 Java 범용 항목을 이해하려고합니다.Java 범용 메서드의 매개 변수

더 구체적으로이 문제 : 내가 와일드 카드가 방법은 E 또는 E의 상속 클래스를 (받을 수 설정하는 것이 지정 "확장"을 추가 할 수 있습니까

public class Node<E>{ 
    private E data; 
    public Node(E data){ 
     this.data=data; 
    } 
    public E get(){ 
     return this.data; 
    } 
    public void set(E data){ 
     this.data=data; 
    } 
} 

경우 노드 의지에 매개 변수의 상영 된 버전 보유).

내가 그대로 두어도 작동합니까?

(나는 약간 일반적인 유형의 불변 측면과 혼동 될 수 있습니다.)

감사합니다!

+3

그것은 이미 당신이 원하는대로 할 것입니다 ... –

+0

나는 질문을 downvoted. 당신이 약간의 일을 스스로하면 쉽게 대답 할 수 있습니다. 당신도 구글을 필요로하지 않는다. 자바 IDE에서 ctrl-space를 사용하면 직접 볼 수있다. – Dariusz

+0

@Dariusz 원하는대로 자유롭게 할 수 있습니다. 문제는 코드가 작동하는 이유 또는 작동 방식을 모르는 경우에도 코드가 작동하는 경우가 있습니다. 그래서 내가 여기 물었습니다. – Paz

답변

3

수업이 이미 필요한 것을 수행하고 있습니다. 예를 들어 설명해 보겠습니다. 노드 (NumberInteger, 수퍼 클래스는 Long 등)를 만들었습니다.

Node<Number> numberNode = new Node<Number>(1); 

또한

numberNode.set(new Integer(1)); 
numberNode.set(new Long(1)); 
3

의 상속 클래스를 이미 수락 한 클래스 Node<E>을 선언했습니다. 당신은 당신이 이상한 경우에도, SomeType도 여기에 interface 될 수 있음을 implements or extends SomeType Remeber 것을 모든 개체를 전달할 수 있습니다

public void set(E extends SomeType){ 
this.data=data; 
} 

를 사용하는 경우

+2

은 컬렉션을 제네릭으로 전달할 때와 다른 점이 있습니까? 'someMethod (ArrayList )'를 쓸 때'E' 타입의 배열리스트 만 전달 될 수 있습니다. –

+2

@PrasadKharkar 좋은 발견! 네, 그들은 다릅니다. – johnchen902

+0

Ohh ... 좋은 그 다음 :) 지식에 추가되었다. 고맙습니다 –

0

, 우리는 E extends SomeType를 작성해야합니다.

0

을 하위 클래스를 전달하여 설정 방법을 호출 할 수 있습니다 또는 작동합니다 ...?

또는 당신 tried it out if it works에게 있습니까?

 final Node<Number> n = new Node<Number>(new Integer(666)); 
     System.out.println(n.get()); 
     n.set(new Integer(777)); 
     System.out.println(n.get()); 
관련 문제