标签:阶段 ima this main strong get ring nts 定义类
Java中的泛型,只在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。
1..泛型类
2.泛型方法
3.泛型接口
public class Person {
public static void main(String[] args) {
A<String> key = new A<String>();//在new A的对象指定泛型的类型为String
key.setKey("李四");//对象使用setKey(T key)方法,中的key形参就是String
A<Integer> key1 = new A();
key1.setKey(20);
System.out.println(key1.getKey());
A key2 = new A();//不指定泛型,代表泛型类型为object类型
key2.setKey(new Object());
//相同的类,但在new对象的时候,指定不同的泛型时,不能相互赋值
//key = key1;
}
}
class A<T>{
private T key;
private int age;
public void setKey(T key) {
this.key = key;
}
public T getKey() {
return this.key;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Test {
public static void main(String[] args) {
//未传入实参的类,创建对象时,指定泛型类型
B1<Integer>b1 = new B1();
b1.test(11);
//传入实参的类,创建对象时,不能传入泛型类型,因为定义类时,已经定义过类型了
B2 b2 = new B2();
b2.test("李四");
}
}
//接口泛型
interface IB<T> {
T test(T t);
}
/**
* 未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需要将泛型的声明也一起加到类中
* @author Zw
*
* @param <T>
*/
class B1<T> implements IB<T>{
@Override
public T test(T t) {
return t;
}
}
/**
* 如果实现接口时指定接口的泛型的具体数据类型
* 这个类实现接口的所有方法的位置都要泛型替换实际的具体数据类型
* @author Zw
*
*/
class B2 implements IB<String>{
@Override
public String test(String t) {
return t;
}
}
标签:阶段 ima this main strong get ring nts 定义类
原文地址:https://www.cnblogs.com/istart/p/12031993.html