2014-09-06 8 views
1

다른 질문/답변을 검색했습니다. 아직이 JAVA 문제에 대해 혼란스러워합니다.제네릭을 올바르게 서브 클래 싱하는 방법은 무엇입니까?

일반 매개 변수를 사용하는 형식을 하위 클래스로 만들려면 해당 매개 변수를 숨기지 않고 일반 매개 변수를 사용하는 동안 어떻게해야합니까? 예를 들어

: 내가 말과 함께, 내 사용자 정의 클래스의 인스턴스 경우

public class A <T> extends ArrayList<T> {} 

그래서, 정수는 매개 변수로, 너무 그것의 ArrayList를 부분에 대한 <T>에 대한 매개 변수로 그 값을 걸립니까? 그렇지 않다면 어떻게 ArrayList의 유형을 지정하겠습니까?

그리고 하위 분류 컨테이너가 여러 상황에서 가장 좋은 아이디어는 아닐지도 모르지만,이 경우 적절하다고 판단했습니다.

답변

1

예, 그렇습니다. 나는 여전히 불분명 해요

public static void main(String[] args) { 
    B<Integer, String> b = new B<Integer, String>(); 
    b.a = 1; 
    b.b = "one"; 

    b.add(1); 
    b.add(2); 
} 

public static class A<T> extends ArrayList<T> { 
    public T a; 
} 

public static class B<U, T> extends A<U> { 
    public T b; 
} 
+0

좋아요 :

public static void main(String[] args) { B<Integer> b = new B<Integer>(); b.a = 1; b.b = "one"; b.add(1); b.add(2); } public static class A<T> extends ArrayList<T> { public T a; } public static class B<T> extends A<T> { public T b; } 

당신이 심지어는 서로 다른 유형이있을 수 좋아하는 경우에

은 당신이 그것으로 슈퍼 클래스를 제공뿐만 아니라 입력합니다. 그래서 다이아몬드 브래킷에서, U는 타입으로 A 수퍼 클래스에 전달됩니까? 그리고 그 장소 소유자는 변수처럼 취급됩니다, 그래서 U는 항상 같고 T는 항상 같은 것입니까? 다른 유형을 사용하는 경우 수퍼 클래스의 유형을 전달하기 위해 서브 클래스에 대해 두 가지 일반 유형이 있어야합니까? – zephos2014

+2

a) 예, 'U'가 수퍼 클래스에 전달 중입니다. 그리고 예'U'는'B' 클래스의 범용 매개 변수 일 뿐이므로'A'로 전달합니다. b) 자리 표시자는 자리 표시 자로 취급되므로 예 상수입니다. c) 클래스의 사용자가 타입을 입력하기를 원한다면 클래스 B extend A '과 하드 코드 A 타입을 가질 수 있고'B'를 타입 일반 회원과 수업 만. – Assaf

관련 문제