Arrays and generics 数组和通用 不能建立对象的几种实现
来源:互联网 发布:工作备忘录 软件 编辑:程序博客网 时间:2024/05/22 15:56
一、建立一个普通数组对象(即建立一个袋子),可以用generics 通用 规定放什么,往里面放东西。
建立一个普通对象数组,大小(10),内容没有(但是对于对象数组,内容一般是对象的地址)
List[] la = new List[10];
1、 意思:现在有个大袋子,谁都可以放东西,各种类型都可以,开始放东西
1.1自己规定只能放String: List<String>[] ls; 第一人:放String.
ls = (List<String>[]) la;
ls[0] = new ArrayList<String>();
ls[1] = new ArrayList<Integer>(); //出错,定义时就规定放String,所以编译器认为是错的。
1.2 List<Integer>[] lt; 第二人:放Integer。
lt=la;// lt=ls;出错,因为List<Integer>[]和List<String>是不同类型。
la[1]=new ArrayList<Integer>();
1.3 Object[] objects = ls; 或是Object[] objects = la; 两语句都可以 // Object[] objects = ls; 编译时不出错,List<String>[])是Object[]的子类,即同一类型
objects[2] = new ArrayList<Integer>();
2、如果袋子放同一类型更简单:
List<String>[] s1 = (List<String>[]) new List[10];
for (int i = 0; i < s1.length; i++)
s1[i] = new ArrayList<String>();
***结论: a generic container will virtually always be a better choice than an array of
generics:一个通用的容器比一个通用的数组更好。
例子:
import java.util.*;
public class ArrayOfGenerics {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
List<String>[] ls;
List<Integer>[] lt;
List[] la = new List[10];
ls = (List<String>[]) la; // "Unchecked" warning
ls[0] = new ArrayList<String>();
// Compile-time checking produces an error:
// ls[1] = new ArrayList<Integer>();
// The problem: List<String> is a subtype of Object
lt=la;
la[1]=new ArrayList<Integer>();
Object[] objects = ls; // So assignment is OK
// Compiles and runs without complaint:
objects[2] = new ArrayList<Integer>();
List<String>[] s1 = (List<String>[]) new List[10];
for (int i = 0; i < s1.length; i++)
s1[i] = new ArrayList<String>();
}
}
Start Length Slot Name Signature
0 67 0 args [Ljava/lang/String;
8 59 1 ls [Ljava/util/List;
6 61 2 la [Ljava/util/List;
20 47 3 objects [Ljava/lang/Object;
37 30 4 spheres [Ljava/util/List;
40 26 5 i 二、当方法参数里没有 传入 T时
1、 类参数,<T> 丢失,
1.1定义类成员没问题:T[] array;
1.2但是在构造函数里,就丢失了:! array = new T[size]; //出错,只是简单的建立对象和定义大小
补救:array = (T[]) new Object[size]; // "unchecked" Warning
2、方法参数,<U> 丢失。
public <U> U[] makeArray() { return new U[10]; }//编译器出错,
package arrays;
public class ArrayOfGenericType<T> {
T[] array; // OK
String[] array1;
@SuppressWarnings("unchecked")
public ArrayOfGenericType(int size) {
array1=new String[10];
// ! array = new T[size]; // Illegal
array = (T[]) new Object[size]; // "unchecked" Warning
}
// Illegal:
// ! public <U> U[] makeArray() { return new U[10]; }
public static void main(String[] args)
{
ArrayOfGenericType<String> t1=new ArrayOfGenericType<String>(10);
String[] s=t1.array1;
Object[] s1=t1.array;
System.out.println("saga"+s);
System.out.print("saga"+s1);
}
}
- Arrays and generics 数组和通用 不能建立对象的几种实现
- Arrays and generics 数组和通用
- 数组和指针(Arrays and Pointers)
- Rust - Arrays and Vectors | 数组和向量
- Swift Tutorial(swift 教程) 3:Arrays, Objects, and Classes数组,对象和类
- 数组 Arrays and associative arrays
- 数组对象的Arrays排序两种方式
- Arrays of generics
- c++不能建立引用数组,可以建立数组的引用
- Java的Generics的几点限制
- CRITICAL SKILL 4.11: Pointers and Arrays 指针和数组
- 为什么不能建立引用的数组?
- 通用链表的建立和使用
- 查找整数数组中“和最大的子数组”的几种实现
- 数组(二):ArrayList的实现和Arrays类的使用
- 指针和对象的数组实现
- 实现数组和对象的深浅拷贝
- jquery遍历筛选数组的几种方法和遍历解析json对象
- centos6.8 安装redis
- 一些优秀的Android学习地址
- 1231 最优布线问题 kruskal
- 「iOS」行车服务app 「客户端、后端思路+代码」
- hdu 3849 求无向图的桥
- Arrays and generics 数组和通用 不能建立对象的几种实现
- 关于maven出现java.lang.NoSuchMethodError: org.springframework.core.io.ResourceEditor
- android中加载webview以及与JS的交互
- failed to create JVM code-6/-4
- 在仿真文件中读取或者写入txt文件
- 如何在Rancher上运行无服务器应用程序
- Spring_spring自动装配置注解(@Autowired)指定要装配置的参数(@Qualifier)
- Java接口总结
- 欢迎使用CSDN-markdown编辑器