//泛型
//泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
// 泛型的参数只能代表引用类型
public static void main(String[] args) {
//泛型方法
String[] charArray = { "baba", "mama","daye" };
say(charArray);
Integer[] integers = { 110, 112,113 };
say(integers);
//泛型参数范围
Chinese chinese = new Chinese();
talk(chinese);
Foreigner foreigner = new Foreigner();
talk(foreigner);
// Dog dog = new Dog();
// talk(dog);
//泛型类
Person1<String> person1 = new Person1();
person1.setT("string");
Person1<Integer> person2 = new Person1();
person2.setT(1);
System.out.printf("整型值为 :%d\n\n", person2.getT());
System.out.printf("字符串为 :%s\n", person1.getT());
//类型通配符
List list = new ArrayList();
list.add(1);
list.add("kong");
getData(list);
getUperNumber(list);
// <? extends T>表示该通配符所代表的类型是T类型的子类。
// <? super T>表示该通配符所代表的类型是T类型的父类。
}
public static void getData(List<?> data) {
System.out.println(data.get(0)+"-data-" + data.get(1));
}
public static void getUperNumber(List<? extends Number> data) {
System.out.println(data.get(0)+"-getUperNumber-" + data.get(1));
}
public static <E> void say(E[] s ){
for ( E element : s ){
System.out.println(element+"打我" );
}
}
public static<T extends Person> void talk(T p){
p.talk();
}
static class Person {
public Person() {
}
public void talk(){
// System.out.println(s);
}
}
static class Chinese extends Person{
public Chinese() {
}
@Override
public void talk() {
System.out.println("zhongguoren");
}
}
static class Foreigner extends Person{
public Foreigner() {
}
@Override
public void talk() {
System.out.println("waiguoren" );
}
}
static class Dog {
public Dog() {
}
public void talk() {
System.out.println("gou" );
}
}
static class Person1<T> {
T t;
public Person1() {
}
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}