java - Java中的结构类对象

标签 java oop struct

创建类似结构的对象是不是完全违背了Java的方式?

class SomeData1 {
    public int x;
    public int y;
}

我可以看到一个具有访问器和修改器的类更像 Java。

class SomeData2 {
    int getX();
    void setX(int x);

    int getY();
    void setY(int y);

    private int x;
    private int y;
}

第一个示例中的类在符号上很方便。

// a function in a class
public int f(SomeData1 d) {
    return (3 * d.x) / d.y;
}

这不太方便。

// a function in a class
public int f(SomeData2 d) {
    return (3 * d.getX()) / d.getY();
}

最佳答案

似乎很多 Java 人不熟悉 Sun Java 编码指南 这说当类是使用公共(public)实例变量是非常合适的 本质上是一个“结构”,如果 Java 支持“结构”(当没有行为时)。

人们倾向于认为 getter 和 setter 是 Java 的方式, 就好像它们是 Java 的核心一样。事实并非如此。如果您遵循 Sun Java 编码指南,在适当的情况下使用公共(public)实例变量, 实际上,您编写的代码比用不必要的 getter 和 setter 弄乱它更好。

从 1999 年开始的 Java 代码约定并没有改变。

10.1 提供对实例和类变量的访问

不要在没有正当理由的情况下公开任何实例或类变量。通常,不需要显式设置或获取实例变量——这通常是方法调用的副作用。

适当的公共(public)实例变量的一个例子是类本质上是一个数据结构,没有行为。 换句话说,如果您使用的是结构体而不是类(如果 Java 支持结构体),那么将类的实例变量公开是合适的

http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-137265.html#177

http://en.wikipedia.org/wiki/Plain_old_data_structure

http://docs.oracle.com/javase/1.3/docs/guide/collections/designfaq.html#28

关于java - Java中的结构类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36701/

相关文章:

java - InfluxDBIOException : java.net.SocketTimeoutException:超时

java - 如何测试 jung 的 PageRank 算法?

c# - 关于在 session 中存储整个 LINQ 对象的想法?

javascript - 除非设置为可写,否则无法覆盖 readOnly 可配置函数值对象原型(prototype)属性

java - 设置 Google Analytics 时出错

java - 如何避免在java中重复调用方法?

php - 有没有办法设置一个类变量以应用于 php 中该类的所有实例?

c - scanf() 在 malloc 结构成员中不起作用

c - 调试断言失败,使用 C 的输入格式无效

c - 作业 : Freeing data in a struct