一、为什么要有泛型Generic
1、泛型Generic:
2、java中的泛型只在编译阶段有效,不会进入到运行阶段。
二、泛型类
/** * 此处的泛型T可以任意的取名 * 一般使用T,意为type * @author 小虞哥哥 * * @param <T> */ class A<T>{ private T key; public void setKey(T key){ this.key=key; } public T getKey(){ return this.key; } } //泛型类 A<String> a=new A<String>(); //在new A的对象指定泛型的类型String a.setKey("张三"); //对象使用setKey(T key)方法中的key形参就是String String strA=a.getKey(); //T getKey(),返回值就有new对象确定返回值是String System.out.println(strA); A<Integer> a2=new A<Integer>(); a2.setKey(1); int i=a2.getKey(); System.out.println(i);
三、泛型接口
//定义一个泛型接口 inteface Generator<T>{ T next(); }
四、通配符
1、格式:
//不确定集合中的元素具体的数据类型,使用?表示所有类型 public void test(List<?>list){ System.out.println(list); }
2、举例:
→<? extends Person> (无穷小,Person]
只允许泛型未Person及Person子类的引用调用
→<? super Person> [Person,无穷大)
只允许泛型未Person及Person父类的引用调用
→<? extends Comparable>
只允许泛型未实现 Comparable接口的实现类的引用调用
五、枚举类
1、手动实现枚举类:
private 修饰构造器
属性使用private final修饰
把该类的所有实例都使用public static final来修饰
2、枚举类和普通类的区别:
→使用enum定义的枚举类默认继承了java.lang.Enum类
→枚举类的构造器只能使用private访问控制符
→枚举类的所有实例必须在枚举类中显示列出(,分隔 ;结尾)
3、实现接口的枚举类
→和普通java类一样,枚举类可以实现一个或多个接口
→若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式,则可以让每个枚举值分别实现该方法
4、枚举类的方法:
六、注解——基本的Annotation
1、使用Annotation时要在其前加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素
2、三个基本的Annotation:
→@Override:限定重写父类方法,该注释只能用于方法
→@Deprecated:用于表示某个程序元素(类,方法等)已过时
→@SuppressWarnings:抑制编译器警告
3、自定义Annotation
→定义新的Annotation类型使用@interface关键字
→Annotation的成员变量在Annotation定义中以无参数方法的形式来声明。其方法名和返回值定义了该成员的名字和类型。