泛型笔记

Java泛型是JDK1.5中引入的一个新特性,其本质是参数化类型,把类型作为参数传递

常见形式有泛型类,泛型接口,泛型方法

语法:
<T,…>T称为是占位符,表示一种引用类型

好处:
1)提高代码重用性
2)防止类型转换异常,提高代码安全性`

实例:
1)作为泛型类

//泛型类
//语法:类名<T,..>
//T表示类型占位符,表示一种引用类型,引用编写多个用逗号隔开
//泛型只能是引用类型
//不同的泛型对象之间不能相互赋值
public class MyGenerics<T> {
    //使用泛型T创建变量
    T t;

    //添加方法
    //作为方法参数
    public void show(T t) {
        System.out.println(t.toString());
    }
    //作为方法返回值
    public T getT() {
        return t;
    }
}

public class MyGenericsTest {
    public static void main(String[] args) {
        MyGenerics<String> demo1 = new MyGenerics<String>();
        demo1.t = "hello";
        demo1.show("你好");
        String string = demo1.getT();
        System.out.println(string);


    }

2)作为泛型接口

//泛型接口
//语法:接口名<T>
public interface MyInterface<T> {
    String name = "张三";

    T server(T t);
    
}

public class MyInterfaceImpl implements MyInterface<String> {

    @Override
    public String server(String s) {
        System.out.println(s);
        return null;
    }
}

public class MyInterfaceTest {
    public static void main(String[] args) {
    impl.server("xxxxxxxx");
    }

或者

//泛型接口
//语法:接口名<T>
public interface MyInterface<T> {
    String name = "张三";

    T server(T t);
    
}

public class MyInterfaceImpl<T> implements MyInterface<T> {

    @Override
    public T server(T t) {
    System.out.println(t);
        return null;
    }
}

public class MyInterfaceTest {
    public static void main(String[] args) {
    MyInterfaceImpl<Integer> impl = new MyInterfaceImpl<>();
    impl.server(10);
    }

3)泛型方法

public class MyGenericsMethod {

    //泛型方法
    public <T> T show(T t) {
        System.out.println("泛型方法" + t);
        return t;
    }

    //public <T> void show(T t) {
    //    System.out.println("泛型方法" + t);
    }


public class MyGenericsMethodTest {
    public static void main(String[] args) {
        MyGenericsMethod myGenericsMethod = new MyGenericsMethod();
        myGenericsMethod.show("加油");
        myGenericsMethod.show(10);
        myGenericsMethod.show(3.14);
    }

泛型集合
概念:参数化类型,类型安全的集合,强制集合元素的类型必须一致

特点:
编译时检查,而非运行时抛出异常
访问时,不必类型转换(拆箱)
不同泛型之间不能相互赋值,泛型不存在多态

public class Demo {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<String>();
        arrayList.add("a");
        arrayList.add("b");

        for (String string : arrayList) {
            System.out.println(string);
        }
                
        Iterator<String> iterator = arrayList.iterator();
        while (iterator.hasNext()) {
            String s = iterator.next();
            System.out.println(s);
        }
    }
}
``
### 尚硅谷 Java 习资料与笔记 #### 关于Java的基础概念 Java提供了一种机制,使得可以编写适用于多种类的代码而无需针对每一种类都单独重写相同的逻辑。这不仅提高了代码的可维护性和安全性,还增强了程序的功能灵活性[^4]。 #### 使用通配符增强功能 当处理未知的具体参数化类时,可以通过使用`?`作为通配符来表示不确定的类。对于只读操作而言非常有用;然而需要注意的是,如果尝试向此类列表中添加任何非`null`的对象,则会导致编译错误[^3]。 ```java public static void read(List<?> list) { for (Object o : list) { System.out.println(o); } } ``` 这段代码展示了如何遍历一个包含任意类元素的集合并打印它们的内容。由于我们不知道实际存储着什么类的对象,所以只能将其视为`Object`来进行访问。 #### 定义带有一个或多个类形参的类 创建自定义类能够使开发者更方便地管理不同种类的数据结构。下面的例子说明了怎样声明带有单个类变量`T`的一般形式以及相应的构造函数: ```java // 自定义类 public class Order<T> { private T temp; public Order(T temp) { this.temp = temp; } // getter 和 setter 方法... } ``` 此外还有支持多维数组转换成列表的方法实现方式如下所示: ```java // 自定义方法 public static <E> List<E> MyArrayToList(E[] arr) { ArrayList<E> list = new ArrayList<>(); for (E element : arr) { list.add(element); } return list; } ``` 上述例子中的静态方法接受一个由某种特定类组成的数组,并返回相同类的动态大小列表。这里的关键在于利用尖括号内的字母(如这里的`<E>`),它告诉编译器该方法本身也具有特性[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值