我可以将类的字段传递给构造函数或方法吗?

Man*_*gos 1 java oop structure

我有以下课程:

public abstract class Map {
    protected PriorityQueue<Node> openNodes;
}
Run Code Online (Sandbox Code Playgroud)

我的实现目前是这样工作的:

public Map() {
        PriorityQueue<Node> openNodes = new PriorityQueue<Node>((Node node1, Node node2) -> Integer.compare(node1.getFinalCost(), node2.getFinalCost()));
    }
Run Code Online (Sandbox Code Playgroud)

但是,我也想使用这样的实现:

public Map() {
        PriorityQueue<Node> openNodes = new PriorityQueue<Node>((Node node1, Node node2) -> Integer.compare(node1.getHeuristicCost(), node2.getHeuristicCost()));
    }
Run Code Online (Sandbox Code Playgroud)

有没有办法将我的 Node 类的heuristicCostfinalCost字段传递给构造函数以实现这些不同的行为?像这样的东西:

public Map(*fieldName*) {
        PriorityQueue<Node> openNodes = new PriorityQueue<Node>((Node node1, Node node2) -> Integer.compare(node1.get*fieldName*(), node2.get*fieldName*()));
    }
Run Code Online (Sandbox Code Playgroud)

如果没有,您能否提出解决方案来实现这一目标?

kay*_*ya3 6

您可以使用Comparator.comparingInt以下方法从方法引用创建比较器:

public Map(ToIntFunction<Node> compareBy) {
    this.openNodes = new PriorityQueue<>(Comparator.comparingInt(compareBy));
}
Run Code Online (Sandbox Code Playgroud)

然后你可以写new Map(Node::getFinalCost)new Map(Node::getHeuristicCost)