有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java可比数组,如何打印值?

长话短说,玩弄泛型和可比性,无法直接打印出值。这里有一个简单的例子

class Ideone<Key extends Comparable<Key>>
{
    private Key[] keys = (Key[]) new Comparable[10];
    public static void main (String[] args) throws java.lang.Exception
    {
        Ideone<Integer> test = new Ideone();
        test.keys[0] = 3;
        System.out.println(test.keys[0]);
    }
}

我得到的错误是:

线程“main”java中出现异常。lang.ClassCastException:[Ljava.lang.Compariable;不能强制转换为[Ljava.lang.Integer

实时代码示例:http://ideone.com/JPfUZw


共 (1) 个答案

  1. # 1 楼答案

    AKey是AComparable,反之亦然。此外,不能使用向下转换初始化泛型数组

    在此处修复代码:

    private Key[] keys = (Key[]) new Comparable[10];
    

    private Comparable[] keys = new Comparable[10];
    

    这将起作用,因为Key是一个Comparable,您可以将Comparable存储在keys数组中,因此Key可以存储在那里

    或者将泛型的类作为参数传递并使用数组。newInstance,如图here

    Key[] keys;
    
    public Ideone(Class<Key> clazz, int size) {
        keys = (Key[]) Array.newInstance(clazz, size);
    }