泛型和自定义注解

1.如何定义泛型类

//定义泛型类
public class Test<T> {
    private T x;
    private T y;
    public Test(T x, T y) {
        this.x = x;
        this.y = y;
    }
    @Override
    public String toString() {
        return "Test{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }
    public T getX() {
        return x;
    }

    public void setX(T x) {
        this.x = x;
    }
    public T getY() {
        return y;
    }
    public void setY(T y) {
        this.y = y;
    }
}

调用泛型类

public class TestMain {
    public static void main(String[] args) {
        Test<Integer> integerTest = new Test<Integer>(66,88);
        Integer x = integerTest.getX();
        Integer y = integerTest.getY();

        Test<String> stringTest = new Test<>("你好", "泛型");
        String x1 = stringTest.getX();
        String y1 = stringTest.getY();
    }
}

2.泛型通配符

//定义泛型类
public class Test<T> {
    private T x;
    public void show(){
        System.out.println("show打印"+x);
    }

    public Test() {
    }

    public Test(T x) {
        this.x = x;
    }

    public T getX() {
        return x;
    }

    public void setX(T x) {
        this.x = x;
    }
}
public class TestMain {
    public static void main(String[] args) {
        Test<Integer> integerTest = new Test<>();
        integerTest.setX(66);

        Test<String> stringTest = new Test<>();
        stringTest.setX("今天星期三");

        Test<Double> doubleTest = new Test<>();
        doubleTest.setX(66.66);

        fun(integerTest);
        fun(stringTest);
        fun(doubleTest);

    }
    //? 泛型通配符
    public static void fun(Test<?> test){
        test.show();
    }
}

3.泛型的上限和下限

//定义泛型类
public class Test<T> {
    private T x;
    public void show(){
        System.out.println("show打印"+x);
    }

    public Test() {
    }

    public Test(T x) {
        this.x = x;
    }

    public T getX() {
        return x;
    }

    public void setX(T x) {
        this.x = x;
    }
}
public class TestMain {
    public static void main(String[] args) {
        Test<Integer> integerTest = new Test<>();
        Test<String> stringTest = new Test<>();
        Test<Number> numberTest = new Test<>();
        Test<Object> objectTest = new Test<>();

        fun1(integerTest);
        fun1(numberTest);
        fun2(numberTest);
        fun2(objectTest);
    }
    //设置泛型的上限 不能超过Number类 需要为Number的子类
public static void fun1(Test<? extends Number> test){
    test.show();
}
//设置下限  不能小于Number类  需要为Number类或者其父类
public static void fun2(Test<? super Number> test){
    test.show();
}
}

4.泛型接口

//定义泛型接口
public interface USB<T> {
    public void user(T t);
}
public class Mouse implements USB<String> {
    @Override
    public void user(String s) {
        System.out.println("打印了"+s);
    }
}
public class Keyboard<T> implements USB<T>{
    @Override
    public void user(T t) {
        System.out.println("打印了"+t);
    }
}
public class TestMain {
    public static void main(String[] args) {
        Mouse mouse = new Mouse();
        mouse.user("hello mouse");

        USBMain.Keyboard<String> stringKeyboard = new USBMain.Keyboard<>();
        stringKeyboard.use("hello keyboard");
    }
 }

5.自定义注解

public class USBMain {
    public static void main(String[] args) {
    Hellow hellow = new Hellow();
        hellow.show("你好注解");
     }
    //自己定义注解 TYPE 类,FIELD 使用在属性,PARAMETER 使用在参数,METHOD使用在方法上 ,//CONSTRUCTOR 使用在构造方法上
    @Target(value = {ElementType.TYPE,ElementType.FIELD,ElementType.PARAMETER,ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)//运行时有效
    @Documented //在生成api文档时是否含有该注解
    @interface My {
        String value() default "";
        int age() default 18;//给其默认值18
        String[] arr() default {};
    }
    //使用自定义注解
    @My(age = 19)
    static class Hellow {
        private String a;
        public void show(String s){
            System.out.println("打印"+s);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值