class pair<T extends Comparable>
{ public T first;
private Object da[]=new Object[2];
pair( T first){
this.first=first;
}
public T get(int n){return (T)da[n]; }
public void set(int n,T a){
da[n]=a;
} public boolean equals(T a){
return true;
}}class dp
{ int a=9; }public class testq
{
public static void main(String []args){
dp o=new dp();
pair<String > dd=new pair<String>("eee");
pair<String > [] a=new pair[3] ;// --------问题所在---------------
// pair<dp> ad=new pair<dp>(o);
// ad=(pair<dp>) dd;
a[0]=new pair("2");
a[1]=new pair(2);
dd.set(1,"dfsfsf");
a[1].set(1,2);
// pair<dp > [] a=new pair<dp>[2];
//a[0]=new pair<dp>(o);
/// a[1]=new pair<String>("哈珀");
// if(ad instanceof pair)
System.out.print( a[1].get(1)+dd.get(1));
}
}如上所示的一段代码 ,是对泛型的一种测试 书上说不能创建泛型数组,例如
pair<String>[] a=new pair<String>[2]//error
书上的解释是类型擦除后 会成为pair a=new pair[2];
接着会转换为object [] obj=a;
那么obj[0]=pair<Integer>
obj[1]=pair<String>
这样就无法限制一个pair<String>数组中只存放pair<String>类型数据
这段解释我看的实在有点迷糊 于是写了如上代码
其中 pair<String > [] a=new pair[3]
那么很奇怪,看如下代码
a[0]=new pair("2");
a[1]=new pair(2);
他们已经存入了 Integer类型的pair 与String的pair
但是a[1].set(1,2)这句就发生错误了 说与pair<String>不匹配 那么 我的问题是pair<String > [] a=new pair[3] 为什么不会出错,毕竟pair<String > 是pair的一个子类啊 那子类怎么能去引用父类呢 其次 存放数组的时候无法检测出来 但在运行时候就出问题了~~~~这是为什么
解决方案 »
- J2SE中像素碰撞检测怎么搞?
- 用RMI写了 聊天 小软件 怎么报这种错误啊???
- 我发现真正理解面向对象,好难啊?有什么办法啊?
- 二维条码打印问题:已知代表二维图像的字节数组,怎么显示出图像?
- 我觉得在应用程序中,我们的应该尽量使class的方法和域不要成为static,因为static的方法和域在一进程当中是常驻内存,如果时间长了,会
- 在JList中嵌入JCheckBox中遇到的问题
- 寻找基础类的文档?
- java多线程synchronized,求解
- 最好的JAVA中文网站或者BBS是哪里???不要说这里.
- 在网页中编写的javascript程序,怎么不让别人看到???100分求购答案!
- 当单击菜单栏中某项时,如何调用已经写好的Dialog
- 内部静态类
pair<String >[] a=new pair[3]相当于pair<String >[] a = (pair<String >[])new pair[3];编译器会插入类型转换;其次 存放数组的时候无法检测出来 但在运行时候就出问题了?
你都知道pair<String > 是pair的一个子类,pair<Integer>是pair的一个子类吧,但new的是pair[3];
a[0] = new pair("2"); a[1] = new pair(2); 此处就是原型赋值,相当于a[1] = (pair<String>)((pair)new pair<Integer>(2)); 编译当然没问题,但a[1].set(1,2);就不同了,是把一个Integer转型为String,也即da[n]=a;这步会这样转String str = (String)a; 2是Integer啊;把pair<String >[] a=new pair[3]中的<String>去掉,让编译器根据传入的参数转吧。