Java泛型与注解

泛型:泛泛的类型 / 类型参数化/外来因素泛型确定

>常见的使用 在集合中通过泛型 限定类型

>如果不提供T,任何出现过T的地方都可以换成Object

>泛型的传递性:
public class Father<T>{
public void f1(T t){
}
}
子类如果调用 f1() 时想要指定类型
public class Child<K> extends Father<K>{
}
或者
public class Child extends Father<String>{
}

>List<Object> 是List<String>的父类吗? 不是的
>Object[]是String[]的父类吗? 是的

>?代表通配符,任意类型
>List<?> 是List<String>的父类吗? 是的

>List<?>可以用吗?可以添加数据吗?
List<?>可以接收装了<任意类型>的List<>
但是一旦这样写了,就不能往这个List<?>里装数据了,一般用来接收处理

>? 限制上限 
public static void f(List<? extends Number> list){

>& 实现
public class MyArrayList<T extends Number & Serializable>{
//类型为Number子类 并且实现Serializable接口
}

>方法泛型
public <K> void test(K k){
//局部的 这个K只在方法中有效果
//K的类型由传入的参数类型决定
}

>方法泛型举例:

这里传入的数组s,就是用来确定方法泛型

查看toArray原码:

>泛型最后会被擦除,仅仅在编译期间有效

注解Annotation:

>@Override就是注解,代表这个方法是覆盖父类的方法,注解用来帮助校验。

>@Deprecated 代表1.这个方法过时了,有更好的方法代替 2.方法有风险 不推荐使用。

>@SuppressWarnings("unused")

>注解本身就是一个类 
public @interface SuppressWarnings {
    String[] value();
}

>自己开发一个(架构中,一般就是基于xml,或者基于注解两种方案)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD,ElementType.METHOD})
public @interface NeedCk{
public String name();
public char cc();
public int ii() default 3;
}

使用的时候(target代表能标在哪):
@NeedCk(cc='a',name="zhangsan",ii=10)

>单纯这样写注解没有用,必须有额外的代码对它进行解析才有用。
结合反射(Java类自己解析自己 )进行开发

猜你喜欢

转载自blog.csdn.net/AhaQianxun/article/details/92594745