gpt4 book ai didi

java - 在内部私有(private)类中拥有非私有(private)数据成员是否有效?

转载 作者:行者123 更新时间:2023-11-30 08:24:07 24 4
gpt4 key购买 nike

我在 Java 工作,遇到一些 OOP 哲学问题。 OOP 的良好做法是将所有数据成员设为private(如果可能,设为final),我同意。但是,我认为在某些情况下我们可以在不丢失封装的情况下违反此规则,例如,仅用于内部目的的私有(private)内部类,它的数据成员可以是公共(public)的,没有外部类可以修改它。

更具体地说,我正在实现一些数据结构作为面试准备的一部分,这是我第一次尝试实现 LinkedList Node 类:

class Node<T> {
private T value;
private Node<T> nextNode;

public Node(T value)
{
this.value = value;
nextNode = null;
}

public Node<T> getNext()
{
return nextNode;
}

public void setNext(Node<T> next)
{
nextNode = next;
}

public T getValue()
{
return value;
}

public void setValue(T v)
{
value = v;
}
}

此类仅在我的 LinkedList 类中使用。我认为对于一个简单的 Node 类来说代码太多了,这个其他实现会大大减少源代码的大小:

class Node<T> {
T value;
Node<T> next = null;
}

我发现即使是 Java 开发人员也在 JDK 源代码中使用这种做法,例如 HashMap 实现中的 Entry 类:

static class Entry<K,V> implements Map.Entry<K,V> {
final K key;
V value;
Entry<K,V> next;
int hash;
.
.
.
}

这使得代码更紧凑。

某些语言(如 C# 或 PHP)提供了更自然地访问数据成员的方法,例如:

public string name
{
get { return _name; }
set { _name = value; }
}

但在 Java 中我们必须创建访问器方法。

在我看来,在私有(private)内部类中使用非私有(private)数据成员是有效的,但我不是 OOP 专家,我不想在面试中发出危险信号。

我知道征求意见的问题通常是封闭的,但我真的需要专家的一些观点。

最佳答案

私有(private)内部类是类实现的一部分,对外部隐藏,因此从 OO 的角度来看,您可以自由地做任何您想做的事情。您不会以任何方式破坏封装。

您实际上可以在内部类中将变量声明为 private 并从包含的类中不受限制地访问它们。但是,如果您决定更喜欢使用方法来读取和写入它们,则由您决定。如果您决定更改某些内容,访问器方法可为您提供更大的灵 active ,但需要更改的仅限于包含类。

关于java - 在内部私有(private)类中拥有非私有(private)数据成员是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23143259/

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