我们总是可以在一个 .java 文件中有多个类。考虑到封装以及每个类都由多行代码组成,在 1 个 .java 文件中包含 1 个类(不要谈论嵌套类)总是有意义的。
现在记录开始发挥作用,它们可以少至 1 行代码。在同一个 .java 类中封装多个记录是否有意义?
例如我们可以有
DTO.java文件将包含
record Employees(List<Employee> employees) { } //This is just a wrapper class that we normally need in order to return a list of objects in rest web services
record Employee(String name, Integer age, List<Attribute> attributes){ }
record Attribute(String name, String value) { }
Run Code Online (Sandbox Code Playgroud)
如果没有记录具有公共访问修饰符,那么我们可以将所有记录包含在名为DTO.java的文件中
在我看来,拥有 3 个 .java 文件,每个文件中只有 1 行代码似乎不太好。
但是,我们仍然会面临类似这里描述的问题,即同一 java 文件中的多个类
通过对 Java 14 中 Records 的介绍的简短搜索,我看到 Record 字段被编译为最终实例变量。这似乎意味着我不能写入 Record 字段......也没有任何教程提到关于写入 Record 字段的任何内容。
这是为什么?为什么我不能像在 C 中使用结构一样在 Java 14 中使用 Record ?
感谢您的任何见解
尝试使用示例代码来检查recordequals()与classhashCode()的默认行为,但与class相比,记录的行为似乎有所不同。
这是记录和类的代码示例
public class EqualsAndHashcode {
public static void main(String[] args) {
var employeeA = new Employee(101);
var employeeB = new Employee(101);
var employeeAClass = new EmployeeClass(102);
var employeeBClass = new EmployeeClass(102);
var printStream = System.out;
printStream.println("record equals: " + employeeA.equals(employeeB) + "\nhashcode objA: " + employeeA.hashCode() + "\nhashcode objB: " + employeeB.hashCode());
printStream.println("\nclass equals: " + employeeAClass.equals(employeeBClass) + "\nhashcode objA: " + employeeAClass.hashCode() + "\nhashcode objB: …Run Code Online (Sandbox Code Playgroud) 我正在使用 jdk 19,想为我的 Java 项目制作一个记录类。
当我声明 Person 类时:
public record Person (String name) {}
Run Code Online (Sandbox Code Playgroud)
我收到错误
预期为“类”或“接口”
我不明白为什么它不允许我使用 record 关键字。
任何帮助表示赞赏
我认为 Java 14 中新的 Java Record 数据类型应该适用于跨网络的数据,因为数据不应该在过程中发生变化,这是记录数据类型的主要特征 - 不可变。
我使用 RSocket 中的数据类型。在发送方,编码器出现错误。我还没有找到编码器是关于什么的。在接收器端,出现解串器错误。据我所知,记录不能实现诸如 Serializable 之类的接口。
所以,记录数据类型不适用于网络编程,对吗?
更新:
我将 Serializable 接口添加到发送方和接收方的记录定义中。发出请求后,TCP发送端没问题,但接收端报错
No encoder for com.....data.Notification, current value type is class com.....data.Notification
Run Code Online (Sandbox Code Playgroud)
那些标记这个问题的人有不同的经历吗?