Java(21):泛型

package zzz;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.sound.midi.VoiceStatus;

import com.sun.org.apache.xpath.internal.operations.String;


public class GenericsDemo {

    public static void main(String[] args) {
        
        List<String> stringArrayList = new ArrayList<String>();
        List<Integer> integerArrayList = new ArrayList<Integer>();
        stringArrayList.add("aa");
        stringArrayList.add("bbb");
        stringArrayList.add("c");
        for(String item : stringArrayList) {
            System.out.println(item);
        }
        
        System.out.println("********泛型类*******");

        //    1
        Generic<String> g1 = new Generic<String>("abc");
        System.out.println(g1.getKey());
        //    2
        Generic<Integer> g2 = new Generic<Integer>(666);
        System.out.println(g2.getKey());
        //    3
        Generic g3 = new Generic(55.55);
        System.out.println(g3.getKey());
        
        System.out.println("********泛型接口*******");
        
        FruitGenerator f = new FruitGenerator();
        System.out.println(f.next());
        
        System.out.println("********泛型方法*******");
        
        Banana banana = new Banana();
        Pear pear = new Pear();
        P person = new P();
        
        GFruit<F> gf = new GFruit<F>();
        gf.show_1(banana);
        gf.show_2(pear);
//        gf.show_1(person); error,gf指定泛型是F
        gf.show_2(person);
        
        String[] x = new String[] {"q", "w", "e", "r"};
        Integer[] i = new Integer[] {3, 5, 7};
        Lister lister = new Lister();
        lister.printArray(x);
        lister.printArray(i);
    }
}

// 普通的泛型类
class Generic<T> {
    private T key;
    
    public Generic(T key) {
        this.key = key;
    }
    public T getKey() {
        return key;
    }
}

//    泛型接口
interface Generator<T> {
    public T next();
}

class FruitGenerator implements Generator<String> {
    private String[] fruits = new String[] {"apple", "banana", "pear"};
    @Override
    public String next() {
        Random rand = new Random();
        return fruits[rand.nextInt(3)];
    }
}

//    类中的泛型方法
class F {
    @Override
    public String toString() {
        return "fruit";
    }
}
class P {
    @Override
    public String toString() {
        return "person";
    }
}
class Banana extends F {
    @Override
    public String toString() {
        return "banana";
    }
}
class Pear extends F {
    @Override
    public String toString() {
        return "pear";
    }
}
class GFruit<T> {
    public void show_1(T t) {
        System.out.println(t.toString());
    }
    public <T> void show_2(T t) {
        System.out.println(t.toString());
    }
}

class Lister {
    public <E> void printArray(E[] array) {
        for (E item : array) {
            System.out.print(item + ", ");
        }
    }
}

 详细参考:https://blog.csdn.net/s10461/article/details/53941091

package zzz;

//    泛型类

public class GenClass {
    
    public static void main(String[] args) {
        
        Pair<String> pairStr = new Pair<String>();
        pairStr.setFirst("first");
        pairStr.setSecond("second");
        
        Pair<Integer> pairInt = new Pair<Integer>();
        pairInt.setFirst(1);
        pairInt.setSecond(2);
        
        System.out.println(pairStr.getFirst());        //first
        System.out.println(pairInt.getSecond());    //2
        
    }

}

//    泛型类
class Pair<T> {
    private T first;
    private T second;
    
    public Pair() {
        
    }
    public Pair(T first, T second) {
        this.first = first;
        this.second = second;
    }
    public T getFirst() {
        return first;
    }
    public void setFirst(T first) {
        this.first = first;
    }
    public T getSecond() {
        return second;
    }
    public void setSecond(T second) {
        this.second = second;
    }
    
}
package zzz;

//    泛型方法

public class GenMethod {

    public static void main(String[] args) {
        
        Integer[] arrInt = {1,2,3,4,5};
        Double[] arrDouble = {3.1, 5.5, 9.7, 2.8};
        Character[] arrChar = {'z', 's', 'y', 'n'};
        Lister lister = new Lister();
        
        lister.printArray(arrInt);
        lister.printArray(arrDouble);
        lister.printArray(arrChar);
        
        System.out.println("**********");
        
        lister.printString(999.999);
        lister.printString("zzz");
        lister.printString('a');
        
    }
    
}

class Lister {
    public <E> void printArray(E[] array) {
        for (E item : array) {
            System.out.print(item+", ");
        }
        System.out.println();
    }
    
    public <E> void printString(E str) {
        System.out.println(str);
    }
}
package zzz;

//    泛型接口

public class GenInterface {

    public static void main(String[] args) {
        
        Type a = new Animal();
        System.out.println(a.func());
        
        Type b = new Age();
        System.out.println(b.func());
        
    }
    
}

interface Type<T> {
    public T func();
}

class Animal implements Type<String> {
    @Override
    public String func() {
        return "animal";
    }
}

class Age implements Type<Integer> {
    @Override
    public Integer func() {
        return 18;
    }
}
原文地址:https://www.cnblogs.com/kenantongxue/p/14040155.html