java - 我在 Java 中的泛型测试不起作用!

标签 java generics compiler-construction

我正在学习 Java,尤其是在泛型领域。

我相当熟悉 C# 中的泛型,但在 Java 中,情况就完全不同了。

我使用了一些非常适合测试的示例,并且我能够很好地在 Java 中复制我的大部分 C# 代码。

但是,当我尝试以下示例时,它不起作用:

private static <T> void swapKundeData(ArrayList<T> data, int index1, int index2) {

    T temporary = (T) data.get(index1);

    data.set(index1, data.get(index2)); //Does not compile
    data.set(index2, temporary); //Does not compile

}

我收到的错误是:

类型 ArrayList 中的方法 set(int, capture#5-of ? extends ExtendTest) 不适用于参数 (int, ExtendTest)

这在 C# 中的等价物工作得很好 - 那么发生了什么事?

我听说 Java 在泛型方面受到了很多批评。这是批评的一部分吗?数据变量的 Remove 和 Add 方法工作得很好。

最佳答案

好吧,我会用

List<Kunde> 

代替

ArrayList<?>

因为无论如何你都在施法到昆德语:).

它不起作用的原因是您不知道传递的对象的类型。因此,如果您设置的 Kunde 可能是错误的类型(因为使用 ArrayList < ? >,您可以传递 ArrayList < String > 并在其上设置 Kunde,这将是错误的类型)。

另一种可能是:

private static <T> void swapData(List<T> data, int index1, int index2) {

    T temporary = data.get(index1);

    data.set(index1, data.get(index2)); //Does compile
    data.set(index2, temporary); //Does compile

}

为了完成我的咆哮,只需使用 Collections 的 swap 方法。

http://download.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#swap(java.util.List , 整数, 整数)

关于java - 我在 Java 中的泛型测试不起作用!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4860410/

相关文章:

java - 在 GridView 组件中显示多个图像时,Android 应用程序崩溃

c# - 泛型的继承

haskell - AST > 1-arity 的免费 Monad?

c# - 使用语句 Roslyn 脚本/代码排序和删除(未使用的)?

c# - 获取 "The source file is different from when the module was built."

java - Java 中的文本分类

java - 使用 Visual Paradigm (VP UML) 类图表示 Java 中的方法重载

java - 高效的循环代码?另外,关于 "for each"循环的查询

swift - 将在 swift 4 中添加任何数字类型的函数

Java 泛型 : adding wrong type in collection