Issue:error: class Node is public, should be declared in a file named Node.java
Analysis and Debug
1.这个问题为什么出现?
在JAVA程序中,一个源文件里能定义多个class,但是有且只能有一个public类。
非public类的名字只要符合java标识符规则就可以,public类的名字必须和源文件名一致。JVM读取的是编译后的.class文件而不是.java源文件,而定义在一个源文件中的多个类编译后都生成了由各自类名命名的.class文件。
2. 如何解决这个问题?
既然JAVA源文件中只能定义一个public类,那么我们可以把其他的类定义成non-public类
出现这个问题的源码:
import java.util.List;
import java.util.LinkedList;
import java.util.ArrayList;
public class Node { <<<<<<这里,class Node不能定义成public
private String name;
private int start;
private int end;
private LinkedList<String> data;
public Node(String name){
this.name = name;
data = new LinkedList<String>();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
public LinkedList<String> getData() {
return data;
}
public void setData(LinkedList<String> data) {
this.data = data;
}
}
public class ConsistentHashing {
private int scope = 10000;
private List<Node> nodes;
public ConsistentHashing() {
nodes = new ArrayList<Node>();
}
public int getScope(){
return scope;
}
public void setScope(int scope) {
this.scope = scope;
}
public void addNode(String nodeName) {
if (nodeName == null) {
throw new IllegalArgumentException("node name cannot be empty");
}
Node node = new Node(nodeName);
if (nodes.size() == 0) {
node.setStart(0);
node.setEnd(scope);
nodes.add(node);
}
else {
}
}
public static void main (String[] args) {
ConsistentHashing hash = new ConsistentHashing();
}
}