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

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

1 1 import java.util.ArrayList; 2 2 import java.util.Arrays; 3 3 import java.util.LinkedList; 4 4 import java.util.List; 5 5 6 6 class ClassParameter<T> { 7 7 public T[] f(T[] arg) { 8 8 return arg; 9 9 } 1010 } 1111 1212 class MethodParameter { 1313 public static <T> T[] f(T[] arg) { 1414 return arg; 1515 } 1616 } 1717 1818 public class ParameterizedArrayType { 1919 public static void main(String[] args) { 2020 // List<String>[] ls = new List<String>[5]; // Compile ERROR: 不能实例化具有参数化类型的数组 2121 List<String>[] ls = new List[5]; // 这样可以 2222 ls[0] = new ArrayList<>(); 2323 // ls[1] = new ArrayList<Integer>(); // Compile ERROR: 类型不匹配 2424 ls[2] = new LinkedList<>(); 2525 // 但是我们可以参数化数组本身。 2626 Integer[] ints = {1, 2, 3, 4, 5}; 2727 Double[] doubles = {1.1, 2.2, 3.3, 4.4, 5.5}; 2828 Integer[] ints2 = new ClassParameter<Integer>().f(ints); 2929 Double[] doubles2 = new ClassParameter<Double>().f(doubles); 3030 System.out.println(Arrays.toString(ints2)); // [1, 2, 3, 4, 5] 3131 System.out.println(Arrays.toString(doubles2)); // [1.1, 2.2, 3.3, 4.4, 5.5] 3232 ints2 = MethodParameter.f(ints); 3333 doubles2 = MethodParameter.f(doubles); 3434 System.out.println(Arrays.toString(ints2)); // [1, 2, 3, 4, 5] 3535 System.out.println(Arrays.toString(doubles2)); // [1.1, 2.2, 3.3, 4.4, 5.5] 3636 } 3737 }
点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java 泛型详解

对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。本文参考java泛型详解、Java中的泛型方法、java泛型详解1\.概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟

java泛型

一、实现机制java泛型实现方法为类型擦除,基于这种方法实现的泛型称为伪泛型。java泛型只在源代码中存在,在编译后的文件中替换为原生类型,并插入强制转换。(真正的泛型是应该存在于源码、编译后文件、运行期)二、擦除实例源码:List<StringtestListnewArrayList<String();

java几个类的简单使用

RandomRandom类用来创建一个新的随机数生成器。对象数组ArrayList集合的长度是可以随意改变的。ArrayList<E这个<E代表泛型泛型:装在集合当中的所有元素,全部都是统一的类型。泛型只能是引用类型,不能使用基本元素。importjava.util.ArrayList;

java基础

JAVA集合在处理数据的过程中经常会需要一个容器来存储某一类型的数据,Java中的数组就是这样一种容器。但Java中的数组有其局限性,定义后的数组长度不可变,超出数组长度后就不能再存放数据了。而很多时候我们并不知道数据到底有多少,所以就需要有不定长的容器来存放数据,这就是集合,Java中的集合都采用了泛型实现,可以存入任何类型的对象数据

Gson通过借助TypeToken获取泛型参数的类型的方法

最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下。由于Java泛型的实现机制,使用了泛型的代码在运行期间相关的泛型参数的类型会被擦除,我们无法在运行期间获知泛型参数的具体类型(所有的泛型类型在运行时都是Object类型)。但是有的时候