합니까 자바는 C ++의 아날로그 있습니다 struct
:
struct Member {
string FirstName;
string LastName;
int BirthYear;
};
내 데이터 유형을 사용해야합니다.
답변
Java에는 확실히 구조체가 없습니다. 🙂 그러나 여기에서 설명하는 것은 JavaBean 종류의 클래스처럼 보입니다.
답변
Java에서 구조체에 해당하는 것은 다음과 같습니다.
class Member
{
public String FirstName;
public String LastName;
public int BirthYear;
};
그리고 올바른 상황에서는 잘못된 것이 없습니다. 캡슐화 된 데이터가있는 클래스를 사용할 때 구조체 구절을 언제 사용 하는가 측면에서 C ++에서와 거의 동일합니다.
답변
실제로 C ++의 구조체는 클래스입니다 (예 : 여기에서 메서드를 정의 할 수 있고 확장 할 수 있으며 클래스와 똑같이 작동 함). 유일한 차이점은 기본 액세스 수정자가 public으로 설정되어 있다는 것입니다 (클래스의 경우 private로 설정 됨). 기본적으로).
이것은 실제로 C ++의 유일한 차이점이며 많은 사람들이 그것을 모릅니다. ; )
답변
Java는 C ++의 구조체와 유사하지 않지만 모든 공용 멤버와 함께 클래스를 사용할 수 있습니다.
답변
Project JUnion을 사용하면 @Struct 주석으로 클래스에 주석을 달아 Java에서 구조체를 사용할 수 있습니다.
@Struct
class Member {
string FirstName;
string LastName;
int BirthYear;
}
프로젝트 웹 사이트에서 더 많은 정보 : https://tehleo.github.io/junion/
답변
Java 14에는 빌드하기 매우 쉬운 구조화 된 데이터 유형 인 레코드에 대한 지원이 추가되었습니다.
다음과 같이 Java 레코드를 선언 할 수 있습니다.
public record AuditInfo(
LocalDateTime createdOn,
String createdBy,
LocalDateTime updatedOn,
String updatedBy
) {}
public record PostInfo(
Long id,
String title,
AuditInfo auditInfo
) {}
그리고 Java 컴파일러는 AuditInfo
레코드 와 연관된 다음 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 */ }
}
공지 사항 그뿐만 아니라 생성자, 접근 방법 equals
, hashCode
그리고 toString
그것을 자바 레코드를 사용하기가 매우 편리합니다, 그래서 당신을 위해 만들어집니다.
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"
)
);
답변
네, 수업이 필요합니다. 클래스는 고유 한 유형을 정의합니다.