2 jcc741486706 jcc741486706 于 2015.07.24 16:12 提问

java泛型异常,如何解决

public static > AnyType[] mergesort(AnyType[] a,AnyType[] b)
{
int i=0;
int j=0;
int index=0;
AnyType[] tmp=(AnyType[]) new Comparable[a.length+b.length];
while(i<a.length&&j<b.length){
if(a[i].compareTo(b[j])<0)
{
tmp[index]=a[i];
i++;
index++;
}
else{
tmp[index]=b[j];
j++;
index++;
}
}
return tmp;
}

public static void main(String[] args){
    Integer a[]={1,13,24,26};
    Integer b[]={2,15,27,28};
    Integer[] tmp= (Integer[])mergesort(a, b);
    System.out.println(tmp);
}
}

结果:Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Comparable; cannot be cast to [Ljava.lang.Integer;
at testcc.mergeSort.main(mergeSort.java:58)
求问如何解决

5个回答

caozhy
caozhy   Ds   Rxr 2015.07.24 16:29
已采纳

java不支持数组类型的协变,虽然AnyType是compareable,但是AnyType[]并不是compareable[]
你只能遍历原来的数组,分别调用元素的类型转换。

jcc741486706
jcc741486706 我试试看~谢谢~
接近 3 年之前 回复
CSDNXIAOD
CSDNXIAOD   2015.07.24 16:16

恶补java(八)——泛型、异常
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

caozhy
caozhy   Ds   Rxr 2015.07.24 17:11

java不支持数组类型的协变,虽然AnyType是compareable,但是AnyType[]并不是compareable[]
你只能遍历原来的数组,分别调用元素的类型转换。

blueZhangFun
blueZhangFun   2015.07.25 07:54

楼下说的很对,分别类型转化就可以了

tongyi55555
tongyi55555   2015.07.25 10:40

AnyType你这个你能强转为Integer么?不知道你的AnyType是怎么实现的。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java异常、泛型和反射
(1)异常 异常的概念:所谓异常是指程序在运行过程中发生的一些不正常事件。(如:除0溢出,数组下标越界,所读取的文件不存在) 异常导致的结果:java程序的执行过程中如出现异常事件,可以生成一个异常类对象。该异常对象封装了异常事件的信息,并将其提交给java运行时系统,这个过程成为抛出异常,不处理的话会直接导致程序直接中断。 java的异常是通过两种机制来处理的 捕获:try-catch-
java泛型学习-泛型的产生原因,使用方法以及具体的警告
如果缺乏能力,自由反而是一种负担   --使用Ubuntu有感 看魔乐的李兴华JAVA视频,视频倒是几年前百度云就存好了,也放在电脑上好久了.最近在重新补习JAVA,正好翻到了这些视频, 从接受的角度而言,视频讲解比看书要容易得多,只是自己一直有一种强迫症似的感觉,喜欢看书学习. 殊不知这是效率最低的方法,今天学的知识点其实时一个小时就能搞懂的知识点,但是因为知识缺陷的原因此前看到别的代
利用泛型解决强转问题
//利用泛型解决强转问题     private T find(int id){         return (T)findViewById(id);     }
Java知识整理(七)之SE.(泛型+异常处理)
泛型(泛型类型必须是引用类型):是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型 泛型把运行时期的问题提前到了编译时期,避免了强制类型转换,优化程序设计,提高了程序的安全性 把泛型定义在类上:public class 类名 把泛型定义在方法上:public 返回类型 方法名(泛型类型T); 把泛型定义在接口上: public interface 接口名;
JAVA泛型-类型擦除太恶心,但项目中大量使用,以及类型擦除引起的问题及解决方法
泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(String[] args) { 4 List list = new ArrayList(); 5 list.add("qqyumidi"); 6
java泛型是如何工作的,为什么泛型这么重要
在javaSE8中有很多值得我们兴奋的地方,在新的版本中新的或者更新的特征允许开发者以更有效的、更简洁的方式写代码。为了完全了解一些新特征的实现,比如lambdas,理解java的核心概念就变得十分重要了,在javaSE8中扮演这个核心角色之一的就是泛型。 这篇文章一开始对泛型进行了一个简单的介绍,并介绍了一些基本的概念。在介绍完基本概念之后我们将深入泛型的一些具体应用场景,最后我们看一下为什么
Java 错误 创建泛型数组 解决方法
 泛型类://Coding by zhaohongliangclass SeqStackT> ...{    private final int size;    private T[] elem;    private int top;    public SeqStack(int size) ...{        this.top = -1;        this.size = s
java基础增强(泛型,反射, 注解,日志)
泛型// 运行时期异常 @Test public void testGeneric() throws Exception { // 集合的声明 List list = new ArrayList(); list.add("China"); list.add(1); // 集合的使用 Str
泛型转换时的异常
因为不管是在编译期还是在运行期,想要用catch捕获异常都必须要知道一异常的确切类型,所以泛型中异常的使用是非常受限制的,当然泛型类不能继承Throwable。但是throws子句是可以用到泛型参数的,下面直接上代码: import java.util.*; interface Processor&amp;lt;T, E extends Exception&amp;gt; { void proce...
java泛型出现原因分析
为了较少潜在的关于擦除的混淆,你必须清楚地认识到这不是一个语言特性。特使Java的泛型实现中的一种折中,因为泛型不是Java语言出现时就有的组成部分,所以这种折中是必须的。这种折中会使你痛苦,因为你需要习惯并了解为什么他会这样。 如果泛型在Java1.0中就已经是其中的一部分了,那么这个特性就不会使用擦除来实现--他将使用具体化,使类型参数保持为第一类实体,因为你就能够在类型参数上执行基于类型的