当前位置: 首页 > 面试题库 >

在Java中像对象一样构造

涂玉韵
2023-03-14
问题内容

是否完全违反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();
}

问题答案:

这是一个经常讨论的话题。在对象中创建公共字段的缺点是您无法控制为其设置的值。在有许多程序员使用同一代码的小组项目中,避免副作用很重要。此外,有时最好返回字段对象的副本或以某种方式对其进行转换等。您可以在测试中模拟此类方法。如果创建新类,则可能看不到所有可能的操作。这就像防御性编程-总有一天,getter和setter可能会有所帮助,并且创建/使用它们不会花费很多。因此它们有时很有用。

实际上,大多数字段都有简单的获取器和设置器。可能的解决方案如下所示:

public property String foo;
a->Foo = b->Foo;
更新:极不可能在Java 7中甚至可能永远不会添加属性支持。Groovy,Scala等其他JVM语言现在确实支持此功能。-亚历克斯·米勒



 类似资料:
  • 15.6 像Java对象那样操作JDBC org.springframework.jdbc.object包能让你更加面向对象化的访问数据库。举个例子,用户可以执行查询并返回一个list, 该list作为一个结果集将把从数据库中取出的列数据映射到业务对象的属性上。你也可以执行存储过程,包括更新、删除、插入语句。 备注:许多Spring的开发者认为下面将描述的各种RDBMS操作类(StoredProc

  • 我有一个类包含以下字段: ID:int/name;String/TargetCost:BigDecimal/ActualCost:BigDecimal 我得到了该类对象的arraylist。例如: 我想通过创建“targetcost”和“actualcost”的总和并将“row”分组来转换这些值,例如。 我现在所写的: 我怎么能那样做?

  • 问题内容: 我在另一个Stack Overflow问题上读到,Python就像Ruby一样,因为它涉及到“一切都是对象”,而Python中的一切都是对象,就像Ruby一样。 这是真的?Python中的所有对象都是像Ruby这样的对象吗? 两者在这方面有何不同?或者它们真的相同吗?例如,您能拿一个数字来做我所看到的Ruby吗: 可以在Python中以相同的方式完成吗? 问题答案: DiveIntoP

  • 可能的重复: 我有一个嵌套的数据结构/JSON,我如何访问一个特定的值? 我有一个json对象,如下所示:

  • 我是java编程的初学者,主要是javascript开发人员。我有一个js数组, 如何在Java中构造相同的结构?

  • 嗨,我正在构建一个cli应用程序,在每个阶段打印输入给用户,tghe用户有几个选项可以从用户类型、选项索引和程序respone acture中选择。此外,用户总是可以回到预先输入的阶段,键入一个不受他键入的前一个输入影响的扩散输入。问题是如何做到这一点,而不浪费这么多内存,在某个队列中保存所有以前的阶段,并且不重复sdame代码一次以上