2011-04-26 3 views
4

이 Java 클래스 정의가 무엇인지 이해하려고합니다.Java 클래스 정의

abstract public class A<P extends B<?, ?>,Input,Output> 
{ 
... 
// class defined 
... 
} 

자바

꺾쇠 괄호 표기 Java Generics위한
+0

im C++ 프로그래머도 자바에서 약간 엿보고 STL 템플릿 정의처럼 보입니다 :) –

+0

많은 복제본이 있습니다 : http://stackoverflow.com/questions/490091/java-generics – MeBigFatGuy

+0

+1 @ MeBigFatGuy 님의 사용자 명 : lol –

답변

3

이 세 가지 형태 파라미터를 가지는 A라고하는 추상 클래스 정의 : 어떤의 (어떤 형태 인수를 가지는) 타입 B이어야합니다

  • P, 또는 그것에서
  • Input을 파생 된 모든 유형의 어떤 종류의 관심의

의,

  • Output
  • 을 입력하면 전나무입니다 t 유형 매개 변수. C++에서 형식 기반 템플릿 매개 변수의 경우 모든 형식을 제공 할 수 있습니다. Java에서는 유형을 확장하거나 구현해야하는 클래스 및/또는 인터페이스에 따라 유형을 제한 할 수있는 옵션이 있습니다.

    +0

    감사합니다. 매개 변수를 취하는 Java 클래스를 설명하는 링크를 제공 할 수 있습니까? – Kazoom

    +1

    @Kazoom : 이러한 클래스를 "generic"클래스라고합니다. 질문의 코멘트에서 MeBigFatGuy가 제공 한 링크를 읽으십시오. –

    +0

    C++ 템플릿처럼 보입니다. – Kazoom

    -1

    이동는 C++ 프로그래머.

    +0

    -1 C++ 사람들은 제네릭이 무엇인지 이미 알고 있다고 생각합니까? C++ 템플릿은 Java 제네릭보다 훨씬 비쌉니다. –

    +1

    주요 차이점은 C++에서 각각의 전문화는 별도의 클래스를 작성하는 반면 Java에서는 전문화가 컴파일 타임에 손실되는 것입니다. – MeBigFatGuy

    +0

    @MeBigFatGuy : 음 ... * 컴파일 단계가 완료된 후 ... Java generics는 C++ generics와 같이 구체화되지 않았습니다. –

    -1

    글쎄, 실제로 이해하기 위해서는 더 많은 정의를 포함하고 싶지만, B는 제네릭 그 자체의 클래스이고, A는 3 개의 일반적인 참조를 포함하고 있습니다. 조금 병적이지만, 단계를 밟을 때는 상당히 쉽습니다.

    1

    "번역"의 비트 :

    "초록"이 클래스는 추상 (~ = 가상 순수) 방법이있을 수 있습니다 의미합니다.

    클래스 A는 일반 (~ 템플릿) 정의

    P는

    P는 확장 B <? ... ... 일반 매개 변수에 대한 추가 제한 조건의 서브 클래스해야입니다 확장? >은 일반 매개 변수 # 1이 다른 일반 클래스의 하위 클래스임을 의미합니다.

    +1

    순수 가상을 갖고 있지 않을 수도 있습니다. Java의 추상 클래스는 그 자체로 직접 인스턴스화 할 수 없다는 특성을 가지고 있습니다. –

    +0

    수정 해 주셔서 감사합니다 - 답변을 수정했습니다. –

    1

    3 개의 일반 매개 변수가있는 추상 클래스 정의입니다.

    첫번째 파라미터 P는 형으로되어있는 제약을 갖는다 (또는 그 연장) 두 일반 파라미터 (이들에 제한 없음)이 클래스/인터페이스 B를 그래서 같을 수

    public class B<T1, T2> { 
    
    } 
    

    두 번째 및 세 번째 매개 변수 인 입력 및 출력에는 제약이 없습니다.