- 浏览: 7281505 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
在项目中需要将页面接受的枚举集合转换为枚举数据,使用泛型:
本想new一个泛型数组但是错误,显示不支持!在网上baidu一把,网上网友说不支持泛型new数据;
报错: T[] ts=new T[size];
发现java JDK1.5不支持泛型?
听网友说:C#支持,但是java不支持。
网友建议采用以下形式:
java下要这么用
public class A<T> {
private T[] arr;
public A(int capacity){
arr = (T[])new Object[capacity];
System.out.println("End");
}
}
仍然报警告:按你的方法还真的通过了编译,但是总感觉别别扭扭的!虽然通过了,编译器还是给出了一个提示,大体意思是“使用了未检查的或者不安全的操作”
最终结果:
java的范型是编译器来完成的。
就说不会因为你用了范型而加快运行速度。 jdk5 中不支持“创建范型数组”,但是可以声明,或在方法中返回。
array是不支持范型的,如果不愿意用array,可以用ArrayList 。
其实,java不是不支持数组,而是范型是一种,特殊的类型,不能用new来实例化,这点和其他类型不同。
即便你不用 arr = new T[capacity] 不把arr声明为数组,只是声明为T arr;在你用arr实例化对象时候也会出错。
其实T 是指一种特殊的具体的实例的类型。
为了使用泛型必选强制转换为泛型,违背了泛型的初衷!
使用范型就是为了避免转型,提高性能,结果这个地方为了使用范型竟然还得转型,总觉得让人难以理解,是不是还有更好的解决办法?
不禁有点汗颜了,呜呜
~~~~(>_<)~~~~
采用的形式如下:
T[] newItems = (T[]) Array.newInstance(items.getClass().getComponentType(), items.length );
我写的工具类如下:
package com.unutrip.callcenter.vacation.utils;
import java.lang.reflect.Array;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
/**
*
* @author longgangbai
*
*/
public abstract class ArrayUtils extends org.apache.commons.lang.ArrayUtils {
/**
* 将一个List<T>装换为T[]
*
* @param <T>
* @param list
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T[] list2Arrays(List<T> list) {
if (CollectionUtils.isNotEmpty(list)) {
Class<? extends Object> clazz = list.get(0).getClass();
T[] ts = (T[]) Array.newInstance(clazz.getComponentType(), list.size());
for (int i = 0; i < list.size(); i++) {
ts[i] = list.get(i);
}
return ts;
}
return null;
}
}
下面转载别人的东东!
有人在讨论为什么Java范型不支持数组http://www.blogjava.net/myqiao/archive/2005/08/08/9580.html
我想这个问题的答案是:因为这样做会破坏类型安全。核心的问题在于Java范型和C#范型存在根本区别:Java的范型停留在编译这一层,到了运行时,这些范型的信息其实是被抹掉的;而C#的范型做到了MSIL这一层。Java的做法不必修改JVM,减少了潜在的大幅改动和随之而来的风险,也许同时也反映出Java Bytecode规范在设计之初的先天不足;C#则大刀阔斧,连CLR一起改以支持更彻底的范型,换句话说,在范型这一点上,感觉C#更C++一点。
在Java中,Object[]数组可以是任何数组的父类,或者说,任何一个数组都可以向上转型成它在定义时指定元素类型的父类的数组,这个时候如果我们往里面放不同于原始数据类型 但是满足后来使用的父类类型的话,编译不会有问题,但是在运行时会检查加入数组的对象的类型,于是会抛ArrayStoreException:
String[] strArray = new String[20];
Object[] objArray = strArray;
objArray[0] = new Integer(1); // throws ArrayStoreException at runtime
因为Java的范型会在编译后将类型信息抹掉,这样如果Java允许我们使用类似
Map<Integer, String>[] mapArray = new Map<Integer, String>[20];
这样的语句的话,我们在随后的代码中可以把它转型为Object[]然后往里面放Map<Double, String>实例。这样做不但编译器不能发现类型错误,就连运行时的数组存储检查对它也无能为力,它能看到的是我们往里面放Map的对象,我们定义的<Integer, String>在这个时候已经被抹掉了,于是而对它而言,只要是Map,都是合法的。想想看,我们本来定义的是装Map<Integer, String>的数组,结果我们却可以往里面放任何Map,接下来如果有代码试图按原有的定义去取值,后果是什么不言自明。
所以,Java编译器不允许我们new范型数组。
发表评论
-
[转] J2EE集群原理
2013-07-23 09:57 4492J2EE集群原理 什么是集群呢?总的来说,集群包括两个概念 ... -
[转]J2EE 中间件 JVM 集群
2013-07-23 09:51 24911 前言越来越多的关键任务和大型应用正运行在J2EE平台上,象 ... -
[转]通过 Terracotta实现基于Tomcat的Web应用集群
2013-07-23 09:45 5100转载自: http://blog.csdn.n ... -
Terrocotta - 基于JVM的Java应用集群解决方案
2013-07-23 09:47 2472前言 越来越多的企业 ... -
Quartz与Terracotta的集成
2013-07-22 20:39 2751Quartz与Terracotta的集成 • 综述 • 配置 ... -
Terracotta服务器的不同配置方式
2013-07-22 20:37 2117Terracotta Server有4类配置方式:1、单机,无 ... -
Terracotta 3.2.1简介 (一)
2013-07-22 20:25 2454Terracotta开源项目以及Terracotta公司 ... -
Jvm级别的集群(转)
2013-07-22 20:14 2311Java的垃圾回收机制( ... -
【转】java并发编程-Executor框架
2012-11-28 13:20 3691转载自 http://www.iteye.com/topic ... -
【转】互联网常见Open API文档资源
2012-07-17 17:22 2393原文出处:http://www.williamlong.i ... -
最近项目开发中遇到几个问题
2011-11-25 18:49 18051.JDK1.60安装之后与Apache CXF开发WebSe ... -
Java 文件合并功能
2011-08-25 08:44 3731在项目中在一个文件目录中存放多个临时文件合并文件功 ... -
Java 分割功能实现
2011-08-25 08:39 2764在项目针对比较大的文件需要文件的分割功能,特意写了一个 ... -
在JVM关闭的时候线程该怎么关闭呢
2011-08-21 13:11 2193在编写线程类的时候设置一个标志,用于表示是否开始执行 ... -
Java获取系统IP地址
2011-08-21 13:01 6013在一个项目中如果你想获取系统的ip地址那么可能许多同 ... -
java 网络编程,RMI,EJB之间那些屁事(二)
2010-12-12 14:40 1887使用RMI和EJB的童鞋,都知道EJB有客户端 ... -
java 网络编程,RMI,EJB之间那些屁事(一)
2010-12-12 14:18 3008在java的开发中不可避免的遇到java ... -
JMX 和系统管理
2010-12-04 16:03 5581检测 ... -
JDK1.5中的打印服务
2009-12-01 13:23 2556package com.unutrip.print; imp ... -
Java中静态变量的适用场景
2009-11-28 15:32 2096Java类中的静态变量在程序运行期间,其内存空间对所有 ...
相关推荐
JDK1.5新特性泛型_深入研究JDK1.5新特性泛型_深入研究JDK1.5新特性泛型_深入研究
Java开发工具包(JDK)1.5是一个重要的版本,引入了多项显著...总的来说,JDK 1.5的泛型和foreach循环是Java语言的重要进步,它们提升了代码的类型安全性和可读性,减少了出错的可能性,是现代Java开发不可或缺的工具。
其次,泛型(Generics)是JDK1.5的一大亮点。泛型允许在定义类、接口和方法时指定参数类型,增强了类型检查,减少了类型转换的麻烦,同时也减少了运行时的类型错误。泛型还引入了通配符,如"? extends T"和"? super ...
Java开发工具包(JDK)1.5引入了一项重大改进,那就是泛型(Generics)。泛型是Java编程语言中的一个关键特性,它允许在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。通过泛型,...
Java 5.0开始支持类型推断,最显著的例子是匿名内部类和匿名对象的创建。编译器能够根据上下文推断出匿名类的类型,使得代码更加简洁。 七、可变参数(Varargs) 在JDK1.5中,开发者可以在方法签名中使用省略号(.....
3. **枚举(Enums)**:提供了一种新的数据类型,用于创建固定的、不可变的值集合。 4. **Annotations(注解)**:提供了一种元数据机制,可以在源代码中添加元数据,用于编译时或运行时的检查和处理。 5. **变量...
这是因为Java的虚拟机(JVM)不支持泛型。为了保持向后兼容,JDK 1.5采用了类型擦除技术,将泛型转化为非泛型的等效形式。 4. **通配符**:在使用泛型时,我们可以使用通配符来表示对类型的一般限制。例如,`?` ...
在JDK1.5中,反射API得到了扩展,增加了对泛型的支持,增强了对枚举类型和注解的访问。 10. **基于XML的配置(JSR 175)** JSR 175引入了注解处理,使得开发者可以通过注解来配置应用程序,而不是依赖XML配置文件...
虽然JDK 1.5引入了泛型,但由于历史原因,无法直接创建泛型数组。为了解决这个问题,可以使用类型通配符或者通过`Arrays.copyOf()`等方法来创建。 ### 总结 JDK 1.5的中文API文档详细列出了所有这些新特性的使用...
jdk1.5.exe jdk1.5 jdk1.5下载
JDK1.5的泛型实现.pdf
前几天上传过这个资源,因为是在jdk1.6上开发的, 测试了一下在jdk1.5上不能用, 今天重新用jdk1.5编译了一下, 这个是可以支持jdk1.5+的 将 pu-xlscommon-1.0.0.jar 添加到工程的 /lib 目录下 用法在附件中 XlsTest....
JDK1.5引入了一些重要的特性,如增强的for循环(foreach)、匿名内部类的改进、枚举类型以及泛型的初步支持。这些特性对Java编程产生了深远影响,提升了代码的可读性和安全性。 然而,由于JDK1.5已不再受官方支持,...
绝版jdk1.5,非常不错的资源。用起来很好。是 Java语言对Bean类属性、事件的一种缺省处理方法。例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新 的值。通过getName/setName来访问name属性,...
在压缩包"IBMJDK1.5linux.zip"中,主要包含的是IBM JDK 1.5的安装文件和相关文档。安装完成后,开发者可以通过设置环境变量(如JAVA_HOME、PATH)来使用这个JDK。通常,这个JDK会包含Java编译器(javac)、Java解释...
10. **枚举常量的构造函数**:在JDK1.5中,枚举类型的构造函数可以接收参数,允许创建具有不同初始状态或行为的枚举实例。 以上这些特性极大地增强了Java语言的功能和表现力,让Java开发者能够编写出更加安全、可...
Java Development Kit(JDK)是Java编程语言的软件开发工具包,它包含了编译、调试、文档生成等工具,使得开发者能够创建、测试和部署Java应用程序。JDK 1.5,也被称为Java SE 5.0(Java Standard Edition 5.0),是...
1. **泛型(Generics)**:JDK1.5引入了泛型,使得在编写代码时可以指定容器(如ArrayList、HashMap等)存储的数据类型,提高了类型安全性和代码可读性。泛型允许在编译时期检查类型,避免了类型转换异常。 2. **...
1. 泛型(Generics): JDK 1.5引入了泛型,允许在类、接口和方法中定义类型参数,增强了代码的类型安全性,减少了类型转换的麻烦。泛型使得在编译时就能检测到可能的类型错误,而不是在运行时抛出异常。 2. 自动...
6. **类型安全的数组创建(Type-Safe Array Creation)**:通过使用泛型,可以避免在创建和使用数组时出现ClassCastException。 7. **可变参数(Varargs)**:允许函数接受任意数量的相同类型的参数,通过三个点(....