- 浏览: 7325784 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 4524J2EE集群原理 什么是集群呢?总的来说,集群包括两个概念 ... -
[转]J2EE 中间件 JVM 集群
2013-07-23 09:51 25161 前言越来越多的关键任务和大型应用正运行在J2EE平台上,象 ... -
[转]通过 Terracotta实现基于Tomcat的Web应用集群
2013-07-23 09:45 5125转载自: http://blog.csdn.n ... -
Terrocotta - 基于JVM的Java应用集群解决方案
2013-07-23 09:47 2496前言 越来越多的企业 ... -
Quartz与Terracotta的集成
2013-07-22 20:39 2779Quartz与Terracotta的集成 • 综述 • 配置 ... -
Terracotta服务器的不同配置方式
2013-07-22 20:37 2150Terracotta Server有4类配置方式:1、单机,无 ... -
Terracotta 3.2.1简介 (一)
2013-07-22 20:25 2481Terracotta开源项目以及Terracotta公司 ... -
Jvm级别的集群(转)
2013-07-22 20:14 2327Java的垃圾回收机制( ... -
【转】java并发编程-Executor框架
2012-11-28 13:20 3727转载自 http://www.iteye.com/topic ... -
【转】互联网常见Open API文档资源
2012-07-17 17:22 2410原文出处:http://www.williamlong.i ... -
最近项目开发中遇到几个问题
2011-11-25 18:49 18221.JDK1.60安装之后与Apache CXF开发WebSe ... -
Java 文件合并功能
2011-08-25 08:44 3757在项目中在一个文件目录中存放多个临时文件合并文件功 ... -
Java 分割功能实现
2011-08-25 08:39 2788在项目针对比较大的文件需要文件的分割功能,特意写了一个 ... -
在JVM关闭的时候线程该怎么关闭呢
2011-08-21 13:11 2204在编写线程类的时候设置一个标志,用于表示是否开始执行 ... -
Java获取系统IP地址
2011-08-21 13:01 6034在一个项目中如果你想获取系统的ip地址那么可能许多同 ... -
java 网络编程,RMI,EJB之间那些屁事(二)
2010-12-12 14:40 1905使用RMI和EJB的童鞋,都知道EJB有客户端 ... -
java 网络编程,RMI,EJB之间那些屁事(一)
2010-12-12 14:18 3032在java的开发中不可避免的遇到java ... -
JMX 和系统管理
2010-12-04 16:03 5616检测 ... -
JDK1.5中的打印服务
2009-12-01 13:23 2579package com.unutrip.print; imp ... -
Java中静态变量的适用场景
2009-11-28 15:32 2114Java类中的静态变量在程序运行期间,其内存空间对所有 ...
相关推荐
由于它是针对JDK 1.5设计的,所以在兼容性方面有很好的表现,但需要注意的是,较新的JDK版本和更现代的JSON库(如Jackson或Gson)可能提供了更多特性和性能优化,因此在新项目中,可能需要考虑使用更新的解决方案。
JDK 1.5绿色版的出现,为那些仍然依赖此版本进行开发或测试的用户提供了一个便捷的解决方案。尽管官方已经不再提供下载,但这种珍藏版的绿色版本确保了这些用户能够继续使用并维护基于Java 5的系统。需要注意的是,...
2. **文档**:查阅官方文档和社区论坛,了解已知问题和解决方案。 3. **维护**:旧版本可能不再接受安全更新,这可能导致安全隐患。确保有合适的安全措施。 4. **迁移策略**:规划一个逐步的迁移策略,以减少因升级...
通过研究这些源代码,学习者可以加深对Java语言的理解,提升编程能力,同时也能掌握实际项目开发中的常见问题和解决方案。对于初学者,这是一个宝贵的实践资源,而对于有经验的开发者,它也能提供一些启发和参考。
- 设计模式是在软件设计中解决常见问题的通用解决方案。 - 主要有三大类:创建型模式、结构型模式和行为型模式。 - **常用设计模式:** - **单例模式(Singleton Pattern)**:保证一个类仅有一个实例,并提供一个...
- `ThreadLocal`类提供了一种线程局部变量的解决方案,可以为每个线程提供独立的变量副本。 ##### 7. 多个线程之间共享数据的方式探讨 - 可以通过显式锁、同步容器等手段来实现多个线程间的共享数据操作。 ##### 8...
泛型在JDK 1.5版本中引入,用于在编译时提供类型检查和消除类型转换,主要解决类型安全问题,使代码重用。 #### 18. 序列化与反序列化 序列化是将Java对象转换成字节流的过程,而反序列化是将字节流恢复成Java对象...
- **解决方案**: - 确认所有必需的 class 文件都已编译并放置正确; - 检查 web server 的权限设置; - 确保 class 文件的包结构与 Applet 的需求一致。 #### 4. Applet 的绘图 - **问题解析**:Applet 中可以...
JDK 1.5引入泛型的目的 - 解决类型安全问题,避免强制类型转换。 - 提高代码的复用性和灵活性。 #### 28. a.hashcode()的作用及与a.equals(b)的关系 - `a.hashcode()`返回对象的哈希码,用于快速查找对象。 - 在...
这款工具为开发者提供了全面的解决方案,不仅包括了代码编辑器、编译器、调试器等功能,还集成了强大的项目管理和团队协作工具。 **1.2 新增特性** 在JBuilder2005中,增加了许多新功能来提高开发效率和软件质量。...
- 泛型提供了一种类型安全的解决方案。 - 使用尖括号`<>`指定泛型参数。 - **枚举类型:** - 枚举是一种特殊的类,用于定义一组固定的常量。 - 枚举类型可以直接在代码中使用,提高了代码的可读性和维护性。 ##...
4.18 单例模式和模版方法模式:设计模式是软件开发中常见的解决方案,单例模式确保一个类只有一个实例,模版方法模式定义算法的结构,把一些步骤延迟到子类实现。 4.19 Java异常处理机制:Java通过try、catch、...
- **面向过程:** 侧重于定义一系列的过程来解决问题,更注重算法的设计。 #### 七、面向对象的特性 - **封装:** 将数据和行为绑定在一起,隐藏对象的内部状态。 - **继承:** 允许子类继承父类的属性和方法。 - **...
10.1 继承——最优的解决方案 237 10.1.1 饭前水果:实例变量的访问控制符 237 10.1.2 一切还是从汽车开始 238 10.1.3 一类车,一个类 241 10.1.4 分开也有麻烦 244 10.1.5 使用继承——问题迎刃而解 245 ...
10.1 继承——最优的解决方案 237 10.1.1 饭前水果:实例变量的访问控制符 237 10.1.2 一切还是从汽车开始 238 10.1.3 一类车,一个类 241 10.1.4 分开也有麻烦 244 10.1.5 使用继承——问题迎刃而解 245 ...
不同类型的容器在创建、扩容等方面可能涉及不同的开销,合理评估并选择最佳方案对于优化整体性能非常关键。 #### 3.2 并发控制机制 多线程环境下,如何保证数据一致性成为了一个挑战。JAVA提供了多种同步工具类(如...