随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。
package Demo_1_25_泛型;

public class Point <T> {    // T是Type的简写,可以定义多个泛型,如果没有定义则默认为Object类型,因为Object类可以接收所有数据类型参数。
    private T x;
    private T 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;
    }
}
package Demo_1_25_泛型;

public class Main {
    public static void main(String[] args) {
        Point <Integer> point = new Point<>();  // 此时point对象中的参数全部为Integer类型,泛型定义只能设置引用类型Integer,而不能是int
        Point <String> point1 = new Point<>();  // 此时point1对象中的参数全部为String类型

        point.setX(12);     // 自动装箱为Integer类型
        int a = point.getX();   // 拆箱:向下转型为int类型
        System.out.println(a);
    }
}

 

 

 

 

通配符概念:

 

package Demo_1_25_泛型2;

public class Message <T> {     // T是Type的简写,可以定义多个泛型,定义后所有参数都是T类型
    private T content;

    public Message() {
    }

    public Message(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }

    public void setContent(T content) {
        this.content = content;
    }
}
package Demo_1_25_泛型2;

public class Main {
    public static void main(String[] args) {
        Message <Integer> msg1 = new Message<>();
        msg1.setContent(11);
        func(msg1);  // 传入泛型为Integer类型的引用
      
        /*
puvlic static void fun(Message <String> msg){}
但是有问题,上述方法应该可以所接受任意类型的泛型参数。此时只能接收String类型,而不能接收其它类型 所以需要通配符?来定义方法中的泛型 在 ? 这个通配符的基础之上还有两种小的通配符: ?extends 类名 :设置泛型的上限 表示该泛型只允许定义类名或类名的子类类型 例如:?extends Number :表示该泛型类型值允许设置Number或Number的子类 ?super 类名 :设置泛型的下限 例如:?super String 只能使用String类或其父类类型 */ Message <String> msg = new Message<>(); msg.setContent("www.baidu.com"); func1(msg); // 传入泛型为String类型的引用 } // public static void func(Message msg){}; // msg.setContent(1.2); // 如果没有泛型,就可以在方法中随意修改数据,极其不安全 public static void func(Message <?extends Number> msg) { // 设置泛型的上限:表示该泛型类型值允许设置Number或Number的子类 // 当传入泛型类型不是(Number或Number的子类)的引用时无法使用此方法 System.out.println(msg.getContent()); } public static void func1(Message<?super String> msg) { // 设置泛型的下限 // 当传入泛型类型不是(String或String的父类)的引用时无法使用此方法 System.out.println(msg.getContent()); } }

 

posted on 2022-01-25 14:14  时间完全不够用啊  阅读(86)  评论(0编辑  收藏  举报