1. Generika-Klasse
1.1 Gewöhnliche Generika
package test.lujianing; /** * 泛型类 * @param <T> */ class Test<T>{ private T obj; public void setValue(T obj){ this.obj =obj; } public T getValue(){ System.out.println(obj.getClass().getName()); return obj; } } /** * 测试泛型类 */ public class TestOne { public static void main(String[] args) { //测试Integer泛型 Test<Integer> t1 = new Test<Integer>(); t1.setValue(5); Integer i = t1.getValue(); System.out.println(i); //测试Double泛型 Test<Double> t2 = new Test<Double>(); t2.setValue(5.55D); Double d = t2.getValue(); System.out.println(d); //测试String泛型 Test<String> t3 = new Test<String>(); t3.setValue("hello world"); String str =t3.getValue(); System.out.println(str); } }
Ausgabeergebnisse:
java.lang.Integer 5 java.lang.Double 5.55 java.lang.String hello world
1.2 K/V-Generika
package test.lujianing; import java.util.HashMap; import java.util.Map; /** * Created by Administrator on 14-3-30. */ class TestKV<K,V>{ private Map<K,V> map=new HashMap<K, V>(); public void put(K k, V v) { map.put(k,v); } public V get(K k) { return map.get(k); } } public class TestFour{ public static void main(String[] args) { TestKV<String,String> t = new TestKV<String, String>(); t.put("name","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")); } }
Ausgabeergebnis:
jianing 24
2. Generische Schnittstelle
package test.lujianing; /** * 泛型接口 * @param <T> */ public interface TestImpl<T> { public void setValue(T t); public T getValue(); }
Ausgabeergebnis:
1 hello word
3. Generische Methode
package test.lujianing; /** * 泛型方法类 */ class TestMethod{ /** * 泛型方法 */ public <T>T getValue(Object s,Class<T> clazz) { System.out.println(clazz.getName()); T t =null; if(clazz.getName().equals("java.lang.Integer")){ Double d = Double.parseDouble(s.toString()); int i =d.intValue(); t=(T)new Integer(i); } if(clazz.getName().equals("java.lang.Double")){ t=(T)new Double(s.toString()); } return t; } } /** * 泛型方法测试类 */ public class 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); } }
Ausgabeergebnis:
java.lang.Integer 30 java.lang.Double 40.0022
4. Generika einschränken
Im obigen Beispiel gibt es keine Einschränkung für den Umfang des Klassentyps „Test8742468051c85b06f0a0af9e3e506b5c“. entspricht Objekt. Beispielsweise möchten wir T auf einen digitalen Schnittstellentyp beschränken. Gehen Sie einfach wie folgt vor: class Testb8acfc0f0bb79e5c69e52dfc9c9fe5d2. Auf diese Weise kann das generische T in der Klasse nur die Implementierungsklasse der Number-Schnittstelle sein. Wenn eine Nicht-Number-Schnittstelle übergeben wird, tritt ein Kompilierungsfehler auf.
5. Wildcard-Generika
package test.lujianing; import java.util.HashMap; import java.util.Map; /** * 通配泛型 */ public class TestFive { public static void main(String[] args) { Map<String,Class<? extends Number>> map = new HashMap<String,Class<? extends Number>>(); map.put("Integer",Integer.class); map.put("Double",Double.class); for (Map.Entry<String,Class<? extends Number>> entry : map.entrySet()) { System.out.println("key:" + entry.getKey() + " value:" + entry.getValue()); } } }
Ausgabeergebnisse:
key:Double value:class java.lang.Double key:Integer value:class java.lang.Integer
Einfaches Beispiel: Beispiel für 1.1
public static void main(String[] args) { //测试Integer泛型 Test<Integer> t1 = new Test<Integer>(); t1.setValue(5); fun(t1); //测试Double泛型 Test<Double> t2 = new Test<Double>(); t2.setValue(5.55D); fun(t2); } public static void fun(Test<?> t){ System.out.println("通配泛型"+t.getValue()); }
Ausgabeergebnis:
java.lang.Integer 通配泛型5 java.lang.Double 通配泛型5.55
6. Ergänzung
In Generika können Sie auf 8742468051c85b06f0a0af9e3e506b5c1a4db2c2c2313771e5742b6debf617a1 usw. stoßen. T und E sind die Überschriften von Typ bzw. Element. E wird im Allgemeinen verwendet, um den Typ von Elementen in einem Sammlungstyp darzustellen, z. B. die Definition der List-Schnittstelle. Die öffentliche Schnittstelle List1a4db2c2c2313771e5742b6debf617a1 erweitert die Sammlung1a4db2c2c2313771e5742b6debf617a1. Dies ist lediglich eine Namenskonvention, es gibt keinen wesentlichen Unterschied zwischen den beiden.
Weitere generische Java-Beispiele und verwandte Artikel finden Sie auf der chinesischen PHP-Website!