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; } }