java - 我可以在不公开所有方法/属性的情况下使用包吗?

标签 java oop package visibility

我有一个大约有 10 个类的项目。为了清楚起见,我将一些类移到了一个包中。有没有一种安全的方法可以在类之间连接而不导致数据泄漏? -使用 public 是危险的,因为任何人都可以改变它。

将一些类移至单独的包后,我使用的每个方法/属性都必须是公共(public)的/有一个 getter。引用字段的获取者可能会产生问题,并将所有内容置于“公共(public)”可见性。

例如我有 Handler 类(不在字符包中)。在这里,Player 类使用处理程序的字符列表。

public class Handler {
    LinkedList<GameObject> objects = new LinkedList<>();
    ...
}

package player;
...
public class Player extends GameObject{
    ...
    private void collision() {
        for (GameObject tempObj : handler.objects) {
            ...             
        }

    }
...
}

谢谢!

最佳答案

Is there a way to connect between classes without data leaks?

这正是可见性修饰符的用途! 默认将所有内容设置为私有(private),然后随时“非私有(private)”:

  • 特定字段的 getter 和(可能) setter (有时将值设置为“可设置”可能并不明智,而是通过构造函数设置它)
  • 分而治之/拆分它:编写小的可见(可能是公共(public)的,可能是包可见的)方法来调用包含逻辑的私有(private)方法

使用一个好的 IDE 会很有帮助,因为它会建议将不必要的公共(public)可见性更改为较低的可见性。我使用 IntelliJ - 它甚至允许您为生成的方法定义默认可见性。

一般来说,在两个不同的实例/类/事物之间共享数据是危险的,您不能断言数据可能不会泄漏,但您至少可以确保您的数据受到尽可能的保护

希望这能回答您的问题:)

关于java - 我可以在不公开所有方法/属性的情况下使用包吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57606095/

相关文章:

java - 把我的类放到别人的包中才能访问包可见的方法?

javac - 未找到父类(super class)

java - 从sqlite数据库android中获取所有表名列表到数组中

java - 计算java web客户端发送和接收的字节数

javascript - Pixi.js 如何将 moveTo 与 OOP 对象一起使用?

C++ 设计 : Pool and pointers VS client-server

java - 将一个包 move 到另一个包并更新字符串引用?

java - 如何让应用程序等待然后开始 Activity 或返回?

java - java中的逻辑运算符

c++ - 如何从一个对象的传递指针中读取变量?