Issue: error: name has private access in Node . System.out.println(node.name);
Analysis and Debug
1.这个问题为什么出现?
当一个类中的成员变量或者方法是private的时候,另一个那么这个类中的成员变量或者方法在其他的类中是不可见的,所以要想其他的类可以访问这些成员变量或方法,需要把它们declare成public的
2. 如何解决这个问题?
把类中的成员变量declare成public的
出现这个问题的源码:
import java.util.List;
import java.util.LinkedList;
import java.util.ArrayList;
class Node {
private String name; <<<< change from private to public
private int start; <<<< change from private to public
private int end; <<<< change from private to public
private LinkedList<String> data; <<<< change from private to public
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 display() {
System.out.println("Status:");
for (Node node: nodes) {
System.out.println(node.name);
}
}
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();
hash.addNode("server1");
hash.display();
}
}