gpt4 book ai didi

java - 如何处理这个类的可见性问题?

转载 作者:太空宇宙 更新时间:2023-11-04 14:15:52 25 4
gpt4 key购买 nike

我有一个 BinarySearchTree 实现,它实现了接口(interface) Tree 的公共(public) insert 方法,如下所示。

public class BinarySearchTree<T extends Comparable<T>> implements Tree<T> {
public boolean insert(T value) {
Node<T> nodeInserted = insertValue(value); //call private method to insert.
return (nodeInserted != null);
}

protected Node<T> insertValue(T value) {
//insert the node and then return it.
}

public Node<T> search(T value) {
//search and return node.
}

//Node class for BST
public static class Node<T extends Comparable<T>> {
// Fields and getters and setters.
}
}

这个想法是其他派生类(例如 AVL)树将重写方法 insertValue 为:`

public class AVLTree<T extends Comparable<T>> extends BinarySearchTree<T> {
@Override
protected Node<T> insertValue(T id) {
//specific code to insert node in AVL
}

// AVL Node
public static class AVLNode<T extends Comparable<T>> extends Node<T> {
// Fields and getters/ setters
}
}

现在我有另一个类TreeMap,它可以使用RB Tree或AVL Tree来实现。我正在尝试重用 AVL 的代码:

public class TreeMap<K extends Comparable<K>, V> implements Map<K,V> {
private AVLTree<K> tree = null;

@Override
public V put(K key, V value) {
//Here is the problem.
}
}

问题是:我想将关键属性作为节点插入 AVL Tree 中,然后需要获取插入的节点并进行一些处理工作。我既无法覆盖也无法获取 AVLTree 类的 insertValue() 。

一个选项是调用插入方法并获取 boolean 结果。检查是否为true,然后再次调用search方法获取节点并进行处理。对于这个问题还有其他更好的解决方案吗?

我还需要一个建议。我已将 Node 类声明为静态,因为它仅与 BST 相关。我需要 AVL 的另一个节点类,并考虑扩展静态类 Node。为了使 Node 在另一个包中可见,我必须声明 public,以便它也可用于 AVLNode。设计有问题吗?

最佳答案

如果 insert 会怎么样?返回null而不是false找到的节点而不是 true ?然后您就可以一次返回这两个信息。更好的主意是返回 Optional<T> .

对于你的第二个问题,我实际上觉得从另一个类的静态内部类扩展 Node 很奇怪。你说Node唯一关心的BST ,但如果你需要它 AVL情况并非如此,因此您最好有两个单独的类或由 Bothon BST.Node 扩展的单个接口(interface)/抽象类和AVL.Node .

关于java - 如何处理这个类的可见性问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27752628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com