• Java数组(2):数组与泛型


    通常,数组与泛型不能很好的结合,你不能实例化具有参数化类型的数组。擦除会移除参数类型信息,而数组必须知道它们所持有的确切类型。但是我们可以参数化数组本身。

     1 import java.util.ArrayList;
     2 import java.util.Arrays;
     3 import java.util.LinkedList;
     4 import java.util.List;
     5 
     6 class ClassParameter<T> {
     7     public T[] f(T[] arg) {
     8         return arg;
     9     }
    10 }
    11 
    12 class MethodParameter {
    13     public static <T> T[] f(T[] arg) {
    14         return arg;
    15     }
    16 }
    17 
    18 public class ParameterizedArrayType {
    19     public static void main(String[] args) {
    20         // List<String>[] ls = new List<String>[5]; // Compile ERROR: 不能实例化具有参数化类型的数组
    21         List<String>[] ls = new List[5]; // 这样可以
    22         ls[0] = new ArrayList<>();
    23         // ls[1] = new ArrayList<Integer>(); // Compile ERROR: 类型不匹配
    24         ls[2] = new LinkedList<>();
    25         // 但是我们可以参数化数组本身。
    26         Integer[] ints = {1, 2, 3, 4, 5};
    27         Double[] doubles = {1.1, 2.2, 3.3, 4.4, 5.5};
    28         Integer[] ints2 = new ClassParameter<Integer>().f(ints);
    29         Double[] doubles2 = new ClassParameter<Double>().f(doubles);
    30         System.out.println(Arrays.toString(ints2)); // [1, 2, 3, 4, 5]
    31         System.out.println(Arrays.toString(doubles2)); // [1.1, 2.2, 3.3, 4.4, 5.5]
    32         ints2 = MethodParameter.f(ints);
    33         doubles2 = MethodParameter.f(doubles);
    34         System.out.println(Arrays.toString(ints2)); // [1, 2, 3, 4, 5]
    35         System.out.println(Arrays.toString(doubles2)); // [1.1, 2.2, 3.3, 4.4, 5.5]
    36     }
    37 }
  • 相关阅读:
    python 发送中文名邮件乱码问题
    python---django
    python中获取文件目录的方法
    python 读取文件的常用方法
    python读取文件的常用方法
    python数据库调用
    mysql数据库主从同步状态正常,无异常报错,数据不能同步
    Python小脚本
    语句和语法
    CIDR详解和ip最长地址前缀匹配
  • 原文地址:https://www.cnblogs.com/storml/p/8401636.html
Copyright © 2020-2023  润新知