Heim > Java > javaLernprogramm > Hauptteil

Teilen mehrerer generischer Java-Beispiele

高洛峰
Freigeben: 2017-01-18 11:00:05
Original
1307 Leute haben es durchsucht

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);
    }
}
Nach dem Login kopieren

Ausgabeergebnisse:

java.lang.Integer
5
java.lang.Double
5.55
java.lang.String
hello world
Nach dem Login kopieren

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"));
    }
}
Nach dem Login kopieren

Ausgabeergebnis:

jianing
24
Nach dem Login kopieren

2. Generische Schnittstelle

package test.lujianing;
/**
 * 泛型接口
 * @param <T>
 */
public interface TestImpl<T> {
    public void setValue(T t);
    public T getValue();
}
Nach dem Login kopieren

Ausgabeergebnis:

1
hello word
Nach dem Login kopieren

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);
    }
}
Nach dem Login kopieren

Ausgabeergebnis:

java.lang.Integer
30
java.lang.Double
40.0022
Nach dem Login kopieren

4. Generika einschränken

Im obigen Beispiel gibt es keine Einschränkung für den Umfang des Klassentyps „Test“. entspricht Objekt. Beispielsweise möchten wir T auf einen digitalen Schnittstellentyp beschränken. Gehen Sie einfach wie folgt vor: class Test. 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());
        }
    }
}
Nach dem Login kopieren

Ausgabeergebnisse:

key:Double value:class java.lang.Double
key:Integer value:class java.lang.Integer
Nach dem Login kopieren

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());
    }
Nach dem Login kopieren

Ausgabeergebnis:

java.lang.Integer
通配泛型5
java.lang.Double
通配泛型5.55
Nach dem Login kopieren

6. Ergänzung

In Generika können Sie auf 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 List erweitert die Sammlung. 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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage