Dmi*_*try 77 java data-structures
Java是否具有C++的模拟struct:
struct Member {
string FirstName;
string LastName;
int BirthYear;
};
Run Code Online (Sandbox Code Playgroud)
我需要使用自己的数据类型.
Tom*_*don 83
Java中的等价物与结构相同
class Member
{
public String FirstName;
public String LastName;
public int BirthYear;
};
Run Code Online (Sandbox Code Playgroud)
在适当的情况下,这并没有错.当你使用带有封装数据的类时,你在何时使用struct verses方面与C++中的实际情况大致相同.
Hei*_*upp 45
Java肯定没有结构:)但你在这里描述的看起来像JavaBean类.
Vla*_*cea 28
Java 14 添加了对 Records 的支持,这是一种非常容易构建的结构化数据类型。
您可以像这样声明一个 Java 记录:
public record AuditInfo(
LocalDateTime createdOn,
String createdBy,
LocalDateTime updatedOn,
String updatedBy
) {}
public record PostInfo(
Long id,
String title,
AuditInfo auditInfo
) {}
Run Code Online (Sandbox Code Playgroud)
而且,Java 编译器将生成以下与AuditInfoRecord关联的 Java 类:
public final class PostInfo
extends java.lang.Record {
private final java.lang.Long id;
private final java.lang.String title;
private final AuditInfo auditInfo;
public PostInfo(
java.lang.Long id,
java.lang.String title,
AuditInfo auditInfo) {
/* compiled code */
}
public java.lang.String toString() { /* compiled code */ }
public final int hashCode() { /* compiled code */ }
public final boolean equals(java.lang.Object o) { /* compiled code */ }
public java.lang.Long id() { /* compiled code */ }
public java.lang.String title() { /* compiled code */ }
public AuditInfo auditInfo() { /* compiled code */ }
}
public final class AuditInfo
extends java.lang.Record {
private final java.time.LocalDateTime createdOn;
private final java.lang.String createdBy;
private final java.time.LocalDateTime updatedOn;
private final java.lang.String updatedBy;
public AuditInfo(
java.time.LocalDateTime createdOn,
java.lang.String createdBy,
java.time.LocalDateTime updatedOn,
java.lang.String updatedBy) {
/* compiled code */
}
public java.lang.String toString() { /* compiled code */ }
public final int hashCode() { /* compiled code */ }
public final boolean equals(java.lang.Object o) { /* compiled code */ }
public java.time.LocalDateTime createdOn() { /* compiled code */ }
public java.lang.String createdBy() { /* compiled code */ }
public java.time.LocalDateTime updatedOn() { /* compiled code */ }
public java.lang.String updatedBy() { /* compiled code */ }
}
Run Code Online (Sandbox Code Playgroud)
请注意,构造函数,访问方法,以及equals,hashCode和toString为您创建,所以它是使用Java记录非常方便。
可以像创建任何其他 Java 对象一样创建 Java 记录:
PostInfo postInfo = new PostInfo(
1L,
"High-Performance Java Persistence",
new AuditInfo(
LocalDateTime.of(2016, 11, 2, 12, 0, 0),
"Vlad Mihalcea",
LocalDateTime.now(),
"Vlad Mihalcea"
)
);
Run Code Online (Sandbox Code Playgroud)
Eug*_*sev 14
Java没有类似于C++的结构,但你可以使用所有公共成员的类.
gan*_*lam 11
是的,Java 还没有结构/值类型。但是,在即将发布的 Java 版本中,我们将获得inline class与 C# 中的 struct 类似的内容,并将帮助我们编写无分配代码。
inline class point {
int x;
int y;
}
Run Code Online (Sandbox Code Playgroud)
小智 9
实际上C++中的结构是一个类(例如,您可以在那里定义方法,它可以扩展,它的工作方式与类完全相同),唯一的区别是默认访问修改器设置为public(对于它们设置为private的类)默认情况下).
这真的是C++的唯一区别,很多人都不知道.; )
小智 8
使用 Project JUnion,您可以通过使用 @Struct 批注对类进行批注来使用 Java 中的结构
@Struct
class Member {
string FirstName;
string LastName;
int BirthYear;
}
Run Code Online (Sandbox Code Playgroud)
项目网站上的更多信息:https : //tehleo.github.io/junion/