请澄清我对Hashset的疑问.考虑以下代码,
class Person
{
String name;
Person(String n)
{
name=n;
}
public String getName()
{
return name;
}
@Override
public boolean equals(Object arg0) {
System.out.println("in equals");
Person obj=(Person)arg0;
System.out.println("1st "+getName());
System.out.println("2nd "+obj.getName());
if(this.getName().equals(obj.getName()))
{
return true;
}
return false;
}
@Override
public int hashCode() {
System.out.println("in hash code");
System.out.println(" value is "+Integer.valueOf(name.charAt(0)));
return Integer.valueOf(name.charAt(0));
}
}
Run Code Online (Sandbox Code Playgroud)
在主要我有以下代码
Person obj1=new Person("bcd");
Person obj2=new Person("cde");
Person obj3=new Person("abc");
Person obj4=new Person("abc");
Run Code Online (Sandbox Code Playgroud)
现在,如果我将这些对象添加到hashset
Set<Person> sset=new HashSet<Person>();
sset.add(obj1);
sset.add(obj4);
sset.add(obj2);
sset.add(obj3);
Run Code Online (Sandbox Code Playgroud)
我得到了这个输出
in hash …Run Code Online (Sandbox Code Playgroud) 我有一个Foo.java编译没有错误的文件。但是当我添加单行时
import static org.junit.Assert.assertNotEquals;
Run Code Online (Sandbox Code Playgroud)
这会导致我的蚂蚁生成以下错误:
compileTests:
[javac] Compiling 27 source files to C:\example\bin
[javac] C:\example\src\Foo.java:7: error: cannot find symbol
[javac] import static org.junit.Assert.assertNotEquals;
[javac] ^
[javac] symbol: static assertNotEquals
[javac] location: class
[javac] 1 error
Run Code Online (Sandbox Code Playgroud)
我正在使用JUnit 4.4。junit-4.4.jar包括在classpath该javac任务。
我曾尝试运行不同版本的编译器与标志-Dbuild.compiler=javac1.7和-Dbuild.compiler=javac1.8,但它没有什么区别。我仍然收到完全相同的错误。
assertNotEquals 是从Assert唯一导致此错误的静态导入。
我已经看到过此文章Java静态导入导致编译错误。可能是编译器错误?
而且我尝试Assert自行导入,并在每个assert语句之前加上Assert.建议的这篇文章。我遇到了同样的错误,这次是在方法调用Assert.assertNotEquals()而不是import语句上。
但是,导入成功编译并在Eclipse上运行。
有人对此有任何想法吗?我想深入了解这一点,而不必实施变通办法。