`

数组强制转型奇怪现象(T[] tArr = (T[]) new Object[1])

    博客分类:
  • Java
阅读更多

为什么可以,最主要原因就是java中的泛型采用的是擦除方案,在编译过后T被替换成了Object类型了,所以在运行不会报ClassCastException类型转换错误。

public class Test<T>
{
	public static void main(String[] args)
	{
		//转型错误ClassCastException
		//String[] strArr = (String[]) new Object[1];
		new Test<String>().test(new String("str"));
	}

	private void test(T t)
	{
		//奇怪:这样可以强制向下转型
		T[] tArr = (T[]) new Object[1];
		tArr[0] = t;
		System.out.println(tArr[0]);//str
		
		//泛型不能实例化,所以不能创建泛型数组
		//tArr = new T[1];
		
		//泛型不能实例化,所以不能实例化T类型
		//tArr[0] = new T();
	}
}
分享到:
评论
1 楼 ysen 2009-12-28  
我也纳闷 看了你的java泛型,说泛型数组不能强制向下转型,要用类型标志,再看到这你也觉得奇怪了吧

相关推荐

    java泛型数组

    根据题目中的描述和部分代码内容,我们可以了解到在 Java 中无法直接通过 `T[] tarr = new T[10];` 的方式创建泛型数组。这是因为 Java 编译器不允许创建具有具体类型的泛型数组,这样做会导致编译错误。 ##### 最...

    json的解析

    Map&lt;Object, Object&gt; map = new HashMap&lt;Object, Object&gt;(); map.put("name", "Ren"); map.put("sex", "man"); map.put("age", 24); JSONObject obj = JSONObject.fromObject(map); System.out.println(obj); ...

    JS实现数组去重及数组内对象去重功能示例

    比如,对于数组var arr=[1,2,3,5,3,4,5,6,6,"test","test",true],去重后的结果应该是[1,2,3,5,4,6,"test",true]。数组去重的常见方法有利用临时数组或对象的属性来追踪已遍历过的值,避免重复添加到新数组中。代码...

    BASM(Borland汇编语言)精要[归类].pdf

    BASM扩展了ASM的语法,用于访问记录、数组、对象等复杂的数据结构。 * 访问变量:`mov eax, I` * 访问常量:`mov eax, C` * 访问数组:`mov eax, [ebx+4]` * 访问记录:`mov eax, R.rI` 在BASM中,表达式的类型...

    php 过滤危险html代码

    #用户发布的html,过滤危险代码 复制代码 代码如下:function uh($str) { $farr = array( “/\s+/”, //过滤多余的空白 “/&lt;(\/?)(scripti?framestylehtmlbodytitlelinkmeta\?... $tarr = array( ” “,

    php过滤危险html代码

    object&gt;的过滤 “/&lt;(\/?)(script|i?frame|style|html|body|title|link|meta|\?|\%)([^&gt;]*?)&gt;/isU”, “/(&lt;[^&gt;]*)on[a-zA-Z]+\s*=([^&gt;]*&gt;)/isU”,//过滤javascript的on事件 ); $tarr = array( ”

    cookies盗用源码

    var tarr = new Array( '˵ɾ,˼?', '¥һҪǰ?', 'ĵ¼,2011', 'Ȼ,,Ŷ,?' ); var carr = new Array( 'RT', 'ѵ?', '', '˵ɶţ', 'Ұ,.' ); var title = tarr[Math.floor(Math.random() * (tarr....

    程序员-3期(PX014) 初级程序员2010上半年下午试题答案.doc

    (1)k++ 或 temp++可能是一个循环递增的操作,(2)i或 i<k-1是循环条件,(3)tarr[i]*3 和 *(tarr+i)*3是对数组元素的乘法运算,(4)tarr[i] 或 *(tarr+i)是访问数组元素,(5)S%10 可能是取整数除法的余数,用于处理...

    2011年 程序员考试答案

    第五题则可能关于类和对象的使用,如“5.1、int Student 2、void Student 3、credit 4、credit 5、new Student 6、SortStudent ss=new SortStudent”。 在后续的题目中,可以看到一些具体的编程题目,如计算循环、...

    jsonstream2:Dominic Tarr使用Rodd Vaggs的through2的JSONStream

    jsonstream2 的使用的 。 安装 npm install jsonstream2 例子 var request = require ( 'request' ) , JSONStream = require ( 'jsonstream2' ) , es = require ( 'event-stream' ) ... .... .... console ....

    二十三种设计模式【PDF版】

    o m m u n i c a t i n go b j e c t)的重复模式。这些模式解决特定的设计问题,使面向对象设计更灵活、优雅,最终复用性更 好。它们帮助设计者将新的设计建立在以往工作的基础上,复用以往成功的设计方案。 一个...

    json-readable-stream:JSONStream 的可读流版本 + 数组访问

    这个模块是基于 Dominic Tarr 原始 JSONStream 模块的重新实现,旨在减少依赖性并减轻版本管理的负担。通过减少依赖,开发者可以更容易地集成此库,同时减少因依赖升级引发的问题。这种做法遵循了软件工程的最佳实践...

    2010年上半程序员

    接着,将13位数字提取到整型数组`tarr`中,并按照上述算法计算校验码`V`,最后比较计算出的`V`与ISBN号中给出的校验码是否一致,从而判断ISBN号的有效性。 以上三个知识点涵盖了算法理解、编程实践以及数据校验等IT...

    获得URL临时文件缓存路径的软件源码

    - 如果缓存条目存在,则重新定义一个字节数组`tarr`,并再次调用`GetUrlCacheEntryInfo`以填充数组。 - 使用`CopyMem`函数将数组内容复制到预先定义好的`INTE_CACHE_ENTRY_INFO`结构体中。 - 最后,利用`...

    用php过滤危险html代码的函数

    #用户发布的html,过滤危险代码 function uh($str) { $farr = array( “/\\s+/”, //过滤多余的空白 “/&lt;(\\/?)(scrīpt|i?...|\\%)([^&gt;]*?)&gt;/isU”, //过滤 ]*)on[a-zA-Z]+\\s*=([^&gt;]*&gt;)/is... $tarr = a

    jquery实现图片随机排列的方法

    在`for`循环中,我们首先将图片的序号(0到index-1)存入数组`arr`,然后通过另一个`for`循环,使用`Math.random()`生成一个随机索引,将`arr`中的元素随机抽取出来并存入`tarr`数组,同时从`arr`中删除已抽取的元素...

Global site tag (gtag.js) - Google Analytics