자바 자바 튜토리얼 공유 해결의 어려움 제네릭의 좋은 프로그래머

  이 클래스 또는 인터페이스를 사용할 때 좋은 프로그래머가 모든 클래스 형식 매개 변수에 속하는으로 <> 클래스 또는 인터페이스, 또는 인터페이스와 함께 제공 자바 자바 튜토리얼 일반적인 문제의 분석을 공유, 전달되는 특정의 <> 참조 데이터 유형.

  일반 기술 : 사실, 컴파일시에 응용 프로그램, 컴파일러 기술은 실행 시간에 사용하는 것입니다, 일반은 존재하지 않을 것입니다.

  삭제 제네릭 때문에 왜? 즉, 에디터가 생성 된 클래스 파일에 적합한 일반적인 유형을 확인 일반적인 없습니다.

  런타임에서, 당신은 강한 차례없는 요소 유형을 얻는 방법을 알아?

  제네릭 보상 : 저장 유형은 런타임에 바로 요소의 유형을 얻을 수 있도록, 요소의 동일한 종류 확인 되었기 때문에 사용자가 변환 작업을 수행 할 필요가 없습니다, 변환은 사내에서 수행 할 수 있습니다 가.

  때 제네릭 클래스 그것?

  이전 Object 클래스가 확장 될 작업에 사용되는 불확실한 시간 참조 데이터 유형은 현재 일반에 의해 표현 될 수있다. 이 문제의 강한 회전을 방지하고, 운영 문제는 컴파일 시간에 전송됩니다.

  프로그램에 정의 된 일반 반영 :

  // 제네릭 클래스 : 클래스의 일반적인 정의.

  classTool <Q> {

  privateQobj;

  publicvoidsetObject (Qobj) {

  this.obj = OBJ;

  }

  publicQgetObject () {

  returnobj;

  }

  }

  // 불확실 참조 데이터 유형의 동작 방법은, 이들이 일반적인 방법에서 정의 될 수있는 경우.

  공개 <W> voidmethod (WW에) {

  에서 System.out.println ( "방법"+ w);

  }

  // 일반적인 정적 방법 : 정적 메서드는 제네릭 클래스 정의에 액세스 할 수 없습니다. 불확실한 데이터 유형을 인용, 당신이 접근 방식에서 일반적인 정의 할 수 있어야 작업의 정적 메서드 경우.

  publicstatic <Q> voidfunction QT () {

  에서 System.out.println ( "함수"+ t);

  }

  // 일반적인 인터페이스를 제공합니다.

  interfaceInter <T> {

  voidshow TT ();

  }

  classInterImpl <R> implementsInter <R> {

  publicvoidshow RR () {

  에서 System.out.println ( "쇼"+ R);

  }

  }

  -------------------------------------------------- ----------

  제네릭 와일드 : 불확실성의 특정 유형을 해결할 수있는 경우,이 와일드 카드이고, 동작의 타입, 그 기능의 특정 유형을 사용하는 것이 필요하지 않은 경우에만 기능 객체 클래스? 당신은 사용할 수 있습니까? 와일드 카드를 테이블에 알 수없는 유형입니다.

  제네릭 제한 :

  제한 :? extendsE : 형 E 또는 E는 하위 개체가 나타날 수의.

  낮은 :? superE : 형 E 또는 E는 부모 타입의 객체를받을 수 있습니다.

  때 사용의 상한 : 컬렉션에 요소를 추가 할 때, 당신은 타입 E의 객체를 추가 할 수 있습니다 및 하위 유형 객체 E.을 추가 할 수 있습니다 이유는 무엇입니까? 시간을 가지고 있기 때문에, 타입 E E 클래스 개체를 수신 할 수 있으며, 오브젝트 E 하위 유형을받을 수 있습니다.

  하한 경우 : 콜렉션 동작에서 획득 된 소자가 전류 수광 소자의 형태 일 수있다 또한, 현재의 구성 요소의 부모 타입에 의해 수신 될 수있다.

  제네릭의 세부 정보 :

  기본 유형의 개체를 전달하지 않을 경우 1), 결국 제네릭 대신에 호출자 유형에 전달 유형에 따라 달라집니다;

  2) 일반 클래스 객체의 사용이 일치해야 지정된 일반 식의 양측에 생성하여;

  그 이유는 컴파일러를 검사 할 때 단지 변수 개체를보고는, 그러나, 우리는 실행시에 메소드를 호출하는 개체의 특정 유형을 고려해야 메소드를 호출;

  3) 식의 양면에, 일반의 양쪽에 이용 될 수없는 반면에, 다른 호환성을 위해 사용하는 ()에서;

  ArrayList를 <문자열> 알 = newArrayList <개체> (); // 错

  // 이렇게 쉬운하지 그것의 양쪽에 일반적인 계약의 특정 유형은, 에러 것을 확인합니다.

  ArrayList를 <? extendsObject> 알 = newArrayList <문자열> ();

  al.add ( "AA"); // 错

  컬렉션이 특정 개체의 문자열을 저장할 수 있기 때문에 // 또한 객체의 다른 서브 클래스에 저장할 수 있습니다, 개체의 특정 유형의 입력 확인 보안 문제를 추가하는 것이 적절하지 않다. ? 개체 하위 유형의 extendsObject 대표 불확실, 당신은 어떻게 특정 유형의 객체 그것을를 추가 할 수 있습니까?

  publicstaticvoidmethod (ArrayList를 <? extendsObject> AL) {

  al.add ( "ABC"); // 错

  // Object 클래스의 메소드는 불확실성 때문에 하위 유형, 수집, 접근 방식의 특정 하위 유형이 작동하지 않습니다의 알 요소를 호출 할 수 있습니다.

  }

추천

출처blog.51cto.com/14573321/2447039