相关疑难解决方法(0)

方法与类型中的另一种方法具有相同的擦除

为什么将这两种方法放在同一个类中是不合法的?

class Test{
   void add(Set<Integer> ii){}
   void add(Set<String> ss){}
}
Run Code Online (Sandbox Code Playgroud)

我明白了 compilation error

方法add(Set)具有与Test类型中的另一种方法相同的擦除add(Set).

虽然我可以解决它,但我想知道为什么javac不喜欢这个.

我可以看到,在许多情况下,这两种方法的逻辑非常相似,可以用一个方法代替

public void add(Set<?> set){}
Run Code Online (Sandbox Code Playgroud)

方法,但情况并非总是如此.

如果你想要有两个constructors接受这些参数的话,这是非常烦人的,因为那时你不能只改变其中一个的名字constructors.

java generics

360
推荐指数
5
解决办法
17万
查看次数

这是有效的Java吗?

这是有效的Java吗?

import java.util.Arrays;
import java.util.List;

class TestWillThatCompile {

    public static String f(List<String> list) {
        System.out.println("strings");
        return null;
    }

    public static Integer f(List<Integer> list) {
        System.out.println("numbers");
        return null;
    }

    public static void main(String[] args) {
        f(Arrays.asList("asdf"));
        f(Arrays.asList(123));
    }

}
Run Code Online (Sandbox Code Playgroud)
  • Eclipse 3.5说是的
  • Eclipse 3.6说没有
  • Intellij 9说是的
  • Sun javac 1.6.0_20说是的
  • GCJ 4.4.3说
  • GWT编译器说是的
  • 人群在我之前的Stackoverflow问题上没有

我的Java理论的理解说没有!

知道JLS对它的评价会很有趣.

java generics gcj javac

59
推荐指数
5
解决办法
3491
查看次数

标签 统计

generics ×2

java ×2

gcj ×1

javac ×1