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

pbgvytdp  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(397)

我有以下课程:

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()));
    }

有没有办法将节点类的heuristiccost或finalcost字段传递给构造函数来实现这些不同的行为?像这样:

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

如果没有,你能提出一个解决方案来实现这一点吗?

x33g5p2x

x33g5p2x1#

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

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

那你就可以写了 new Map(Node::getFinalCost) 或者 new Map(Node::getHeuristicCost) .

相关问题