导航:首页 > 编程语言 > java泛型默认

java泛型默认

发布时间:2025-02-17 18:33:09

A. 请问,java中,泛型数组的数组怎么初始化(就是ArrayList数组)

既然你暗示就是ArrayList了,
首选就从Arraylist想了

可以试试:

import java.util.ArrayList;
public class Test{
public static void main(String[]args){
ArrayList<ArrayList<Integer>> als = new ArrayList<ArrayList<Integer>> ();
ArrayList<Integer> a1 = new ArrayList<Integer>();
ArrayList<Integer> a2 = new ArrayList<Integer>();
ArrayList<Integer> a3 = new ArrayList<Integer>();
ArrayList<Integer> a4 = new ArrayList<Integer>();
//下面是添加行,你可以用循环添加固定的行
//每一列就是一个ArrayList<Integer>,你可以任意添加,长度不固定吧
als.add(a1);
als.add(a2);
als.add(a3);
als.add(a4);
System.out.println(als.size());

}
}

tao_3000的方法可行,只是Integer[]创建时要指定维数
可以自己写个算法自动增加维数

对于你说的数据量问题,个人理解是这样的:

达到了几十万几百万的数据量的时候,我想大概就是从数据库中吧数据读取出来,进行批量的处理或者更新之类的操作。
你说得很对,如此庞大的数据量肯定会使效率降低,
但是我们完全可以一次从数据库中读取几百条记录,进行操作

关于如何从数据库中一次读取很少的记录,jdbc和hibernate都有相应的实现

在者,数据量过大,呵呵,JVM可能崩溃哦 *_*

B. java,关于利用反射自动设置List<T>中T的类型

泛型可以用"<T>"代表,任意类型的。
解释: “<T>”是泛型的默认值,可以被任意类型所代替,如:
List<String> list = new ArayList<String>();这个就定义了一个String类型的”泛型“集合,那么T的类型就是字符串。
List<T> list = new ArayList<T>();
可以赋值给list:list.add("StringBatch");
可以获取到list的值:list.get(0),结果就是”StringBatch“;
这个时候T的类型也是String。也就是说T是动态的,可以被任意指定类型。

C. JAVA怎么初始化泛型数组

首先由于Java泛型的实现,不可以使用如下的代码

public class GenSet<E> {
private E a[];

public GenSet() {
a = new E[INITIAL_ARRAY_LENGTH]; // error: generic array creation
}
}

那么我们如何在保持类型安全的同时实现这一点?

我在Java论坛上看到了这样的解决方案:

import java.lang.reflect.Array;

class Stack<T> {
public Stack(Class<T> clazz, int capacity) {
array = (T[])Array.newInstance(clazz, capacity);
}

private final T[] array;
}

在这里,我们需要讨论"checked" and "unchecked"。

Checked:strong typing。GenSet明确知道它包含的对象类型(即它的构造函数是使用Class <E>参数显式调用的,当方法传递非类型E的参数时,方法将抛出异常。请参阅Collections.checkedCollection。

在这种情况,我们需要这样写:

public class GenSet<E> {

private E[] a;

public GenSet(Class<E> c, int s) {
// Use Array native method to create array
// of a type only known at run time
@SuppressWarnings("unchecked")
final E[] a = (E[]) Array.newInstance(c, s);
this.a = a;
}

E get(int i) {
return a[i];
}
}



Unchecked: weak typing。实际上没有对作为参数传递的任何对象进行类型检查。

在这种情况,我们需要这样写:

public class GenSet<E> {

private Object[] a;

public GenSet(int s) {
a = new Object[s];
}

E get(int i) {
@SuppressWarnings("unchecked")
final E e = (E) a[i];
return e;
}
}

请注意,数组的组件类型应该是类型参数的擦除:

public class GenSet<E extends Foo> { // E has an upper bound of Foo

private Foo[] a; // E erases to Foo, so use Foo[]

public GenSet(int s) {
a = new Foo[s];
}

...
}

所有的这些都源于Java中泛型一个的特性但也是一个weakness:它是使用擦除实现的,因此除非实施一些显式机制(type-checking),否则“泛型”类不知道它们在运行时创建的类型参数,故无法提供 type-safety。

阅读全文

与java泛型默认相关的资料

热点内容
6s怎样找到qq中传送的文件夹 浏览:306
只想看股票指数用什么app 浏览:249
keilmdkwin10 浏览:776
dnf86版本刺客废了 浏览:379
qq拼音词库 浏览:848
苹果aqq怎么注册 浏览:766
微信公众号昵称侵权 浏览:992
怎么让程序开机启动 浏览:795
技嘉怎么换bios设置教程 浏览:156
改pdf文件大小 浏览:498
phytion编程后怎么看运行情况 浏览:958
云动网络科技有限公司 浏览:398
编程锻炼哪些需求 浏览:897
查看钢材价格用什么app 浏览:511
穿越火线384版本 浏览:716
电子化计划哪个网站好 浏览:983
网线信号缺失如何改变网络信号 浏览:379
灌注桩拉拔试验数据多少为合格 浏览:781
如何利用过往数据拟合方程 浏览:995
win10一机多屏切换 浏览:776

友情链接