我可以将 class 的字段传递给构造函数或方法吗?
Can I pass a field of a class to a constructor or a method?
我有以下 class:
public abstract class Map {
protected PriorityQueue<Node> openNodes;
}
我的实现目前是这样工作的:
public Map() {
PriorityQueue<Node> openNodes = new PriorityQueue<Node>((Node node1, Node node2) -> Integer.compare(node1.getFinalCost(), node2.getFinalCost()));
}
不过,我也想使用这样的实现:
public Map() {
PriorityQueue<Node> openNodes = new PriorityQueue<Node>((Node node1, Node node2) -> Integer.compare(node1.getHeuristicCost(), node2.getHeuristicCost()));
}
有没有办法将我节点class的heuristicCost或者finalCost字段传递给构造函数来实现这些不同的行为?像这样:
public Map(*fieldName*) {
PriorityQueue<Node> openNodes = new PriorityQueue<Node>((Node node1, Node node2) -> Integer.compare(node1.get*fieldName*(), node2.get*fieldName*()));
}
如果没有,您能否提出实现此目的的解决方案?
您可以从方法引用创建比较器,使用 Comparator.comparingInt
:
public Map(ToIntFunction<Node> compareBy) {
this.openNodes = new PriorityQueue<>(Comparator.comparingInt(compareBy));
}
那你可以写new Map(Node::getFinalCost)
或new Map(Node::getHeuristicCost)
.
我有以下 class:
public abstract class Map {
protected PriorityQueue<Node> openNodes;
}
我的实现目前是这样工作的:
public Map() {
PriorityQueue<Node> openNodes = new PriorityQueue<Node>((Node node1, Node node2) -> Integer.compare(node1.getFinalCost(), node2.getFinalCost()));
}
不过,我也想使用这样的实现:
public Map() {
PriorityQueue<Node> openNodes = new PriorityQueue<Node>((Node node1, Node node2) -> Integer.compare(node1.getHeuristicCost(), node2.getHeuristicCost()));
}
有没有办法将我节点class的heuristicCost或者finalCost字段传递给构造函数来实现这些不同的行为?像这样:
public Map(*fieldName*) {
PriorityQueue<Node> openNodes = new PriorityQueue<Node>((Node node1, Node node2) -> Integer.compare(node1.get*fieldName*(), node2.get*fieldName*()));
}
如果没有,您能否提出实现此目的的解决方案?
您可以从方法引用创建比较器,使用 Comparator.comparingInt
:
public Map(ToIntFunction<Node> compareBy) {
this.openNodes = new PriorityQueue<>(Comparator.comparingInt(compareBy));
}
那你可以写new Map(Node::getFinalCost)
或new Map(Node::getHeuristicCost)
.