1. 일반 클래스
1.1 일반 제네릭
코드 사본은 다음과 같습니다.
패키지 테스트 .lujianing;
/**
* 일반 수업
* @param <t>
*/
클래스 테스트 <T> {
개인 t obj;
public void setValue (t obj) {
this.obj = obj;
}
public t getValue () {
System.out.println (obj.getClass (). getName ());
반환 obj;
}
}
/**
* 일반 수업을 테스트하십시오
*/
공개 수업 테스터 {
public static void main (String [] args) {
// 정수 제네릭을 테스트합니다
테스트 <integer> t1 = new test <integer> ();
t1.setValue (5);
정수 i = t1.getValue ();
System.out.println (i);
// 이중 제네릭을 테스트합니다
테스트 <bouble> t2 = new test <bouble> ();
t2.setValue (5.55d);
double d = t2.getValue ();
System.out.println (d);
// Test String Generic
<string> t3 = new test <string> ();
t3.setValue ( "Hello World");
문자열 str = t3.getValue ();
System.out.println (str);
}
}
출력 결과 :
코드 사본은 다음과 같습니다.
java.lang.integer
5
java.lang.double
5.55
java.lang.string
안녕하세요 세계
1.2 k/v 제네릭
코드 사본은 다음과 같습니다.
패키지 테스트 .lujianing;
java.util.hashmap import;
java.util.map import;
/**
* 14-3-30의 관리자가 작성했습니다.
*/
클래스 testkv <k, v> {
개인지도 <k, v> map = new Hashmap <k, v> ();
공공 공간 풋 (k k, v v) {
map.put (k, v);
}
public v get (k k) {
return map.get (k);
}
}
공개 수업 testfour {
public static void main (String [] args) {
testkv <string, string> t = new TestKv <String, String> ();
T.put ( "이름", "Jianing");
System.out.println (t.get ( "name"));
testkv <string, integer> t2 = new testkv <string, integer> ();
t2.put ( "Age", 24);
System.out.println (t2.get ( "age"));
}
}
출력 결과 :
코드 사본은 다음과 같습니다.
Jianing
24
2. 일반 인터페이스
코드 사본은 다음과 같습니다.
패키지 테스트 .lujianing;
/**
* 일반 인터페이스
* @param <t>
*/
공개 인터페이스 readimpl <t> {
공개 void setValue (t t);
public t getValue ();
}
출력 결과 :
코드 사본은 다음과 같습니다.
1
안녕하세요
3. 일반적인 방법
코드 사본은 다음과 같습니다.
패키지 테스트 .lujianing;
/**
* 일반 방법 클래스
*/
클래스 테스트 메드 {
/**
* 일반적인 방법
*/
public <t> t getValue (Object S, 클래스 <t> Clazz) {
System.out.println (clazz.getName ());
t t = null;
if (clazz.getName ().
double d = double.parsedouble (s.toString ());
int i = d.intvalue ();
t = (t) 새로운 정수 (i);
}
if (clazz.getName ().
t = (t) 새로운 이중 (s.toString ());
}
반환 t;
}
}
/**
* 일반 방법 테스트 클래스
*/
공개 수업 testthree {
public static void main (String [] args) {
testMethod t = new TestMethod ();
int i = t.getValue ( "30.0011", integer.class);
System.out.println (i);
double d = t.getValue ( "40.0022", double.class);
System.out.println (d);
}
}
출력 결과 :
코드 사본은 다음과 같습니다.
java.lang.integer
30
java.lang.double
40.0022
4. 제네릭을 제한하십시오
위의 예에서는 클래스 테스트 범위 <T> 유형 홀더 t에 제한이 없으며 기본 제한 유형은 객체와 동일합니다. 예를 들어, T를 디지털 인터페이스 유형으로 제한해야합니다. 이 작업을 수행하십시오 : 클래스 테스트 <t 숫자>.
5. 야생 제네릭
코드 사본은 다음과 같습니다.
패키지 테스트 .lujianing;
java.util.hashmap import;
java.util.map import;
/**
* 와일드 제네릭
*/
공개 수업 시험 {
public static void main (String [] args) {
map <string, class <?
map.put ( "Integer", Integer.class);
map.put ( "double", double.class);
for (map.entry <string, class <? extrends number >> entry : map.entryset ()) {
System.out.println ( "키 :" + enther.getKey () + "value :" + eTry.GetValue ());
}
}
}
출력 결과 :
코드 사본은 다음과 같습니다.
키 : 이중 값 : 클래스 java.lang.double
키 : 정수 값 : 클래스 java.lang.integer
간단한 예 : 1.1의 예제
코드 사본은 다음과 같습니다.
public static void main (String [] args) {
// 정수 제네릭을 테스트합니다
테스트 <integer> t1 = new test <integer> ();
t1.setValue (5);
재미 (T1);
// 이중 제네릭을 테스트합니다
테스트 <bouble> t2 = new test <bouble> ();
t2.setValue (5.55d);
재미 (T2);
}
공개 정적 무효 재미 (테스트 <?> t) {
System.out.println ( "Wild Generic" + T.getValue ());
}
출력 결과 :
코드 사본은 다음과 같습니다.
java.lang.integer
와일드 제네릭 5
java.lang.double
와일드 제네릭 5.55
6. 보충
제네릭에서는 <t> <e> 등이 각각 유형과 요소의 이니셜입니다. e는 일반적으로 목록 인터페이스의 정의, 공개 인터페이스 목록 <e> 확장 수집 <e>과 같은 컬렉션 유형의 요소 유형을 나타내는 데 일반적으로 사용됩니다. 이것은 단지 이름 지정 습관이며, 둘 사이에는 필수적인 차이가 없습니다.