java 范型问题求解答

问题描述

都说java 不支持创建范型数组的原因是因为防止编译通过但是可能在运行过程中出现classcastexception的情况GenTest<String> genArr[] = new GenTest<String>[2];Object[] test = genArr;GenTest<StringBuffer> strBuf = new GenTest<StringBuffer>();strBuf.setValue(new StringBuffer());test[0] = strBuf;GenTest<String> ref = genArr[0]; //上面两行相当于使用数组移花接木,让Java编译器把GenTest<StringBuffer>当作了GenTest<String>String value = ref.getValue();// 这里是重点! 但是其实即使不用数组 一样也可能出现运行中classcastexception的情况public class Test<t> { private t value; public static void main(string args[]) { test<string> t = new test<string>(); t.setvalue("abc"); object o = t; test<stringbuffer> b = (test<stringbuffer>)o; system.out.println(b.getvalue().append("abcd"); } public t getvalue() { return value; } public void setvalue(t value) { this.value = value; }

解决方案

强制转型编译器肯定检查不多,只能在运行期抛出ClassCastException了。这个强制转型貌似跟泛型不能混为一谈吧
解决方案二:
java的泛型会在编译成bytecode的时候擦除掉的...不会留到运行时的

时间: 2024-09-21 08:52:44

java 范型问题求解答的相关文章

Java范型知识

我相信很多人跟我一样还未学习过范型的概念就开始使用范型的实例,最典型的就是集合框架.为了 进一步深入了解范型,这一次通过几个简单的例子来说明范型的注意事项. 一.没有范型的世界 所有的java类都派生自java.lang.Object ,这意味着所有的java对象都可以转换成Object,听起来似乎 很美妙,但事实并非如此.举个例子,假设现在需要一伙人去排队,要求只有学生可以参与进来,但是如 果对于这个队伍没有条件限定的话,那就意味着我们不想要的一些群体也会进入大军之中,这不利于管理 .再如下面

代码分析-一道Java笔试题,求解答(关于类的加载与初始化)

问题描述 一道Java笔试题,求解答(关于类的加载与初始化) 自己查了一些资料,还是看不懂这个程序的输出结果,求各位详细解释初始化和执行过程,谢! public class Alibaba { public static int k = 0; public static Alibaba t1 = new Alibaba("t1"); public static Alibaba t2 = new Alibaba("t2"); public static int i =

求问,一道关于tomcat,java 的问题,求解答

问题描述 求问,一道关于tomcat,java 的问题,求解答 java.net.BindException: Address already in use: JVM_Bind at java.net.DualStackPlainSocketImpl.bind0(Native Method) at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106) at java.net.Abstract

Java范型的两种写法

1.原始的DAO层的类: package com.test; public class UserDao { public void add(User user){ //.保存实体的代码 } public User get(int id) { //.查询实体的代码 return null; } } 其中,User类代码比较简单,如下: package com.test; public class User { private int id; private String name; public

使用Java范型需要注意的地方

静态方法要想范化,需要指定其类型参数 非范化类型中的实例方法要想范化,也需要制定其类型参数. 范化类型中的实力方法可以直接使用其类型本身的类型参数. 范型不是协变的,即List<Integer>不是List<Number>的子类. 不能实例化范型类型的数组,即new List<String>[3] 是不合法的,除非类型参数是一个未绑定的通配符,即new List<?>[3] 是合法的. 构造延迟,在代码编写时我们不能通过类型参数来构造一个该类型的实例,原因是

java.lang.NoClassDefFoundError 问题求解答

问题描述 java.lang.NoClassDefFoundError 问题求解答 自己做的小程序,引用百度地图的时候 出现的异常,我另外有个项目是导入的项目,里面也是有百度的SDK引用,同样的eclipse和ADT的版本,没有出现这个异常,试了网上的很多办法,没有能解决.求大神指教! 解决方案 [问题]java.lang.NoClassDefFoundError如何解决java.lang.NoClassDefFoundError问题解决 java.lang.NoClassDefFoundErr

java对象转化-java对象转型问题求解答

问题描述 java对象转型问题求解答 这个不太明白,求具体例子说明,看了网上的一些举例介绍说明还是不太明白实际意义是干嘛,做项目能实际应用到哪里 解决方案 日常我们用的比较普遍的就是数值类型的转换,比如字符串转整形,数值转为字符串等等,对象对象的向上向下转型,你可以看看多态,装箱等 解决方案二: 比如string s="6",,int i=Integer.parseInt(s),,可以这样转换,,但是如果s="a",那么再转换就会报numberFormatExcep

java 线程同步 急求解答

问题描述 在多线程编程中,有一个队列(用linkedList实现),里面会有大量数据,先需要多线程进行快速访问,该怎么实现?如列表{'a','b','c','d','e','f'}中,对每个元素都加上字符串'q',该怎么实现多线程顺序化访问并添加字符串?求实例简单代码 解决方案 你要是做作业帮不了你,要是项目实际想解决问题就这么做:ConcurrentLinkedDeque q = new ConcurrentLinkedDeque(你的LinkedList)然后这个q就随便多线程玩了.线程安全

string-java新手 素数判定求解答。

问题描述 java新手 素数判定求解答. 如题,下面是程序.但我不知道为什么在for语句的时候,必须使用divisor<=d/2而divisor<=d就无法执行..这里break是不是跳出整个while循环,还是调回到for.求解.import java.util.Scanner;public class Test{ public static void main(String args[]){ Scanner input = new Scanner(System.in); /*a为素数的个数