-3

为什么泛型在我的机器上不起作用。为什么下面的代码在没有类型转换的情况下无法在 Eclipse 中工作String。我正在使用 Java 1.6

package com.withgeneric;

 class Util {
    // Generic static method
    public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
        return p1.getKey().equals(p2.getKey()) &&
               p1.getValue().equals(p2.getValue());
    }
}

 class SPair<K, V> {

        private K key;
        private V value;

        // Generic constructor
        public SPair(K key, V value) {
            this.key = key;
            this.value = value;
        }

        // Generic methods
        public void setKey(K key) { this.key = key; }
        public void setValue(V value) { this.value = value; }
        public K getKey()   { return key; }
        public V getValue() { return value; }
    }



public class GenericMethod {

    /**
     * @param args
     */
    public static void main(String[] args) {

        Pair<Integer, String> p1 = new SPair<>(1, "apple"); //Giving Error
        Pair<Integer, String> p2 = new SPair<>(2, "pear"); //Giving Error
        boolean same = Util.<Integer, String>compare(p1, p2);

        // TODO Auto-generated method stub

    }

}
4

5 回答 5

2

在 Eclipse 中,转到 Window > Preferences > Java > Compiler 并查找 JDK 合规性。确保它至少为 1.5。

于 2013-04-03T10:18:15.383 回答
0

你检查过你的 Eclipse 项目中配置的 JVM 吗?转到配置构建路径,然后检查是否包含正确的库

于 2013-04-03T11:02:19.437 回答
0

自 Java 1.5 以来,这无需强制转换即可工作。

package java.util;

public interface List<E> extends Collection<E> {

    ....        

    E get(int index);

    ....

}

也许有用:Java 泛型

于 2013-04-03T10:18:34.310 回答
0

如果您使用的是 java 1.5 或更高版本,则此语句不会给出任何错误。但是,如果您使用的是旧版本

List<String> list = new ArrayList<String>();

会报错。首先,您必须解决这个问题,然后才会出现类型转换。

于 2013-04-03T10:30:56.743 回答
0

编写一个包含您在上面发布的行的整个程序。不要复制和粘贴它们,将它们全部输入。包括 java 程序所需的行,即public static void main (String[] args)等。在该程序上执行“清理”和“构建”,并告诉我们整个结果。如果这仍然导致错误,请发布整个程序和整个错误。

另请注意,很难(充其量)弄清楚另一台机器的配置出了什么问题,而无法查看它;帮助我们获取有关那里的信息。突然的回答让人觉得您希望我们修复的确实是 Java。

于 2013-04-03T11:08:20.387 回答