gpt4 book ai didi

java - 为什么所有领域在 playframework 中都是公开的?

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:09 24 4
gpt4 key购买 nike

我仍然有疑问,为什么使用 playframework 类中的所有字段都应该公开?

class A {
public int a;
public int b;
}

一些简短的解释会很好。

据我所知,如果它们是公开的,那么 playframework 会为它们使用生成的不可见 getter 和 setter 吗?但如果它们是私有(private)的,那么……没有 getter 和 setter 那么我应该自己写它们吗?

如果它能这样工作,那为什么这不再是 Java?我想太简单了,难以理解。

最佳答案

文档 provides an explanation for this . Play 打破了许多 Java 约定,使代码更具可读性。

基本上,如果您要编写:

class A {
private int x;
public int getX() { return x; }
public void setX(int x) { this.x = x; }
}

为什么不让框架为您生成 getter 和 setter (similar to C#)?当然,由于如文档中所述,生成的 getter 和 setter 仅在运行时可用,因此需要将这些字段声明为公共(public),这样如果类外部的代码访问该变量,Java 编译器就不会引发错误。

基本上,这允许您编写:

class A {
public int x;
}

class B {
public void process() {
A a = new A();
a.x = 42;
}
}

代替:

class B {
public void process() {
A a = new A();
a.setX(42);
}
}

更好的是,如果您需要 getter 或 setter 中的特定逻辑,您可以添加它,例如:

class A {
public int x;

public void setX(int x) {
if (x < 0) throw new IllegalArgumentException("x must be positive");
this.x = x;
}
}

并且仍然像这样使用它:

class B {
public void process() {
A a = new A();
a.x = 42;
}
}

当然,这是否是处理事情的正确方法是一个见仁见智的问题,但对于 Java 开发人员来说,寻找更简单的方法来编写所有这些样板 getter 和 setter 是很常见的(无论它的相对优点如何, GroovyJythonJRubyFantom 都提供了一种创建和访问属性的机制,其语法类似于 Play 正在实现的语法;Rhino 至少为调用访问器甚至提供了类似的语法Scala 有一个更简单的机制来添加访问器)。

关于java - 为什么所有领域在 playframework 中都是公开的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6711898/

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