Java 如何判断字段不会被保存

Java 如何判断字段不会被保存,java,Java,我有一个类,用于将数据从一个应用程序传输到另一个应用程序,然后在进行更改时进行更新 public class Data { private String name; private String number; private String info; ... getters/setters... } 比如说,如果您更改了名称和编号,它们将被更新,但例如,信息不会被更新。将来告诉程序员这是为了让他们能够立即识别它,最好的方法是什么 更新: 它被编码为JSON文

我有一个类,用于将数据从一个应用程序传输到另一个应用程序,然后在进行更改时进行更新

public class Data {
    private String name;
    private String number;
    private String info;

    ... getters/setters...
}
比如说,如果您更改了
名称
编号
,它们将被更新,但例如,信息不会被更新。将来告诉程序员这是为了让他们能够立即识别它,最好的方法是什么

更新:
它被编码为JSON文件,当我把它取回时,我就不再关心info字段了。它可以是空的

您可以创建特定于应用程序的自定义注释。如果您使用的是Hibernate之类的框架,那么可以使用@transient。

从这里开始

几乎所有的程序员都会知道,行为就是你所解释的

@Table(name = "data")
public class Data {
    @Id
    @Column(name = "name")
    private String name;

    @Column(name = "number")
    private String number;

    private String info;

    ... getters/setters...
}


更新:它被编码为JSON文件,当我得到它时,我不再关心信息字段。它可能是空的

可能不是正确的方式,但是如果您只是在谈论“通知”其他程序员,您可以简单地将transient关键字放在您的info字段中


但当然,这将是真正的“非正式”;因为它可能根本不会影响框架处理字段的方式。

我将使用序列化和transient关键字组合

import java.io.*;
导入java.util.*;
//这个类实现“Serializable”让系统知道
//这样做没关系。作为程序员,您知道这一点。
公共类SerializationSample实现可序列化{
//这些属性符合对象的“值”。
//这两个将被连载;
私有字符串aString=“该字符串的值”;
私有整数=0;
//但这不会发生,因为它被标记为瞬态。
私有临时列表无中断长列表;

在您的文件中没有显示正在持久化
名称
编号

如果您打算以某种持久的方式将行为放入文件中,那么这不仅仅是一个文件,它是一个对象的表示,其中数据和相关行为作为一个整体存在。请编写一个方法来阐明意图

public boolean isStorable() {
    boolean isOk = true;
    isOk &= (name != null && name.length() > 0);
    isOk &= (number > 0);
    return isOk;
}
清楚地表明,不是所有这些项都有助于存储对象,也不是这些项中的每个值都有助于有效的存储状态


它还清楚地表明,此对象允许其私有数据中存在无效状态。这是一种代码气味,可能表明存在设计缺陷。也许您应该调查这是否是一个设计缺陷,如果是,则修复它。

我认为您要找的词是持久性。
name
number
是持久性的nt,
info
不是。除了在字段旁边写注释外,我还有什么选择?如果您使用的是Hibernate,那么@Transient annotation将适用于您正在谈论将这些信息发送到另一个应用程序,如果您使用的是Web服务,您应该记录WS并在文档中写入所有需要的信息而不是在Bean中。如果使用DB,我会将其作为注释写入更新DB的方法中。Bean本身与保存的数据无关,它只是一个容器。保存/操作数据的方法需要解释它在做什么以及为什么。但是OP从未谈论DB或Hibernate,也没有通知其他程序管理员otation可以像override、functional interface一样提供帮助。我刚刚给出了db:)@BackSlashOP的示例,它确实提到了一个自定义注释。否则,只需一条注释
//transient
就很有用了-大多数人应该理解它,并且与Hibernate的比较是有效的,即使它没有被使用。我谈到了db,但它实际上是有用的在应用程序之间使用一组字段和一组不做任何事情的getter和setter在Java中不是一个真正的面向对象编程对象,因为它没有任何行为。它是一个C风格的数据结构。它们在Java中有时很有用,您描述了实现它们的正确方法,但是如果您实现了这样一个东西,请记住,对于程序的这一部分,您也失去了OOP的好处。还请注意,许多非常有用的框架、技术和工具并不是理想的OOP。如果您在存储时考虑了特定的持久化技术,那么请接受该技术的约定。例如,如果使用JPA,然后在注释中指出哪些字段被持久化,哪些数据库表和列被持久化。人们将能够理解您的标记,因为框架将教育他们它的含义。但是既然他说了什么是最好的方式来告诉程序员这是为了让他们能够立即识别它,程序员应阅读文档。
public boolean isStorable() {
    boolean isOk = true;
    isOk &= (name != null && name.length() > 0);
    isOk &= (number > 0);
    return isOk;
}