什么是泛型

1.为什么使用泛型

为了解决数据类型一致性的安全问题,

泛型的格式:

public 类名<T,E...>{ T E  都是泛型标志

}

单个泛型


public class Test1 {
    public static void main(String[] args) {
        Point<Integer> p1 = new Point<>(15,20);
        Point<Double> p2 = new Point<>(19.2,13.5);
        Point<String> p3 = new Point<>("东经170°","北纬209°");

        //如果没有给泛型设置类型  默认为Object类型
        Point  p4 = new Point();

        
        System.out.println(p1);
        System.out.println(p2);
        System.out.println(p3);



    }
}


class Point<T>{
    private T x;
    private T y;

    public Point() {
    }

    public Point(T x, T y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public String toString() {
        return "Point{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }
}

多个泛型

public class Test2{
    public static void main(String[] args) {
        Point<Integer,String> p1 = new Point<>(15,"北纬289°");
        
        System.out.println(p1);

    }
}

/**
 * 定义多个个泛型
 * @param <T>
 */
class Point<T,F>{
    private T x;
    private F y;

    public Point() {
    }

    public Point(T x, F y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public String toString() {
        return "Point{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }
}

通配符

public class Test3 {
    public static void main(String[] args) {
        Info<Integer> i = new Info<>();
        i.setVar(15);
        fun(i);

        /**
         * 泛型的引用类型传递要求类型匹配而且泛型也要匹配  如果让泛型匹配任意类型  可以不写 也可以写通配符  ?
         */
    }
    public static void  fun(Info<?> a) {
       a.show();
    }
}
class Info<T>{
    private T var;

    public void setVar(T var) {
        this.var = var;
    }
    public void show(){
        System.out.println(var+"==============");
    }
}

泛型的上限和下限

public class Test4 {
    public static void main(String[] args) {
        Info<Integer> i = new Info<>(12);
        fun(i);
        Info<String> s = new Info<String>("武培磊");
        fun1(s);
    }
    //设置泛型的上限
    public static void fun(Info<? extends Number> a){
        a.show();
    }
    public static void fun1(Info<? super String> a){
        a.show();
    }

}
class Info<T>{
    private T var;

    public Info(T var) {
        this.var = var;
    }
    public void show(){
        System.out.println(var+"=========");
    }
}

泛型接口

public class Test5 {
    public static void main(String[] args) {
        Upan<Integer> upan = new Upan<>();
        XinXi xi = new XinXi();
    }
}
interface Usb<T>{
  public T show();
}
class Upan<T> implements Usb<T>{

    @Override
    public T show() {
        return null;
    }
}
   // 如果不想让泛型类型延续下去 用一个具体的数据类型实现
class XinXi extends Upan<String>{

}

泛型方法

public class Test6 {
    public static void main(String[] args) {
        Info i = new Info();
        i.show();
    }

}
class Info{
    public <T> T show(){
        return null;
    }
}

                                                    注解

1.预定义注解   在jdk中带有的注解

package com.wpl.demo7;
@SuppressWarnings(value = "all")//忽略所有的警告
public class Test7 {
    public static void main(String[] args) {
        int a=19;
    }
}


class Info{
 private String name;
@Deprecated //表示该方法过时了 如果调用该方法会出现删除线
 public void show(){
     System.out.println("~~~~~~~~~~");
 }

}
@FunctionalInterface //表示该接口有且只有一个接口   又叫函数式接口
interface USB{
  int  a  ();
  default void show(){

  }

2.自定义注解  自己定义的注解


public class Test8 {
    public static void main(String[] args) {

    }
}
 //自定义注解
  @interface wpl {

  }
  @wpl
  class Info{
    @wpl  //没有任何意义  没有被解析
    public void show(){

    }
  }

3.元注解  注解在注解在的注解

public class Test9 {
    public static void main(String[] args) {

    }
}

//自定义注解

/*@Target(value = ElementType.TYPE) //改注解只能在类上使用
@Target(value = ElementType.METHOD)//该注解只能在方法上使用
@Target(value = ElementType.FIELD) //该注解只能在属性上使用   */
@Target(value = ElementType.TYPE)
/*@Retention(value = RetentionPolicy.SOURCE)//表示在源代码的时候生效
@Retention(value = RetentionPolicy.CLASS)//表示在字节码时有效,但是字节码被加载到jvm中就没有了该注解*/
@Retention(value = RetentionPolicy.RUNTIME)    //表示在字节码时有效,但是字节码被加载到jvm中还有该注解
@interface  wpl{

}

@wpl
class Info{

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值