zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    如何与多个线程的操作epoll fd
    谈谈Runtime类中的freeMemory,totalMemory,maxMemory等几个方法
    JAVA实现实用的ZIP压缩与解压
    HornetQ
    github
    实例解析shell子进程(subshell )
    Linux Shell Scripting Tutorial (LSST) v2.0
    java中byte数组与int类型的转换(两种方式)
    inotifywait实现目录监控
    子shell的$$
  • 原文地址:https://www.cnblogs.com/storml/p/8401636.html
Copyright © 2011-2022 走看看