Java มีแอนะล็อกของ C ++ หรือไม่struct
:
struct Member {
string FirstName;
string LastName;
int BirthYear;
};
ฉันต้องใช้ประเภทข้อมูลของฉันเอง
Java มีแอนะล็อกของ C ++ หรือไม่struct
:
struct Member {
string FirstName;
string LastName;
int BirthYear;
};
ฉันต้องใช้ประเภทข้อมูลของฉันเอง
คำตอบ:
Java ไม่มีโครงสร้างแน่นอน :) แต่สิ่งที่คุณอธิบายที่นี่ดูเหมือนคลาส JavaBean
inline class
ในอนาคตอันใกล้ซึ่งฉันเชื่อว่าเป็นเหมือนโครงสร้าง
สิ่งที่เทียบเท่าใน Java กับโครงสร้างจะเป็น
class Member
{
public String FirstName;
public String LastName;
public int BirthYear;
};
และไม่มีอะไรผิดปกติในสถานการณ์ที่ถูกต้อง เช่นเดียวกับใน C ++ ในแง่ของเวลาที่คุณใช้ข้อต่อโครงสร้างเมื่อใดที่คุณใช้คลาสที่มีข้อมูลที่ห่อหุ้ม
จริงๆแล้วโครงสร้างใน C ++ เป็นคลาส (เช่นคุณสามารถกำหนดเมธอดได้ที่นั่นมันสามารถขยายได้มันทำงานเหมือนกับคลาสทุกประการ) ข้อแตกต่างเพียงอย่างเดียวคือตัวดัดแปลงการเข้าถึงเริ่มต้นถูกตั้งค่าเป็นสาธารณะ (สำหรับคลาสที่ตั้งค่าเป็นส่วนตัว โดยค่าเริ่มต้น).
นี่เป็นข้อแตกต่างเพียงอย่างเดียวของ C ++ หลายคนไม่รู้ว่า ; )
Java ไม่มีโครงสร้างของอะนาล็อกกับ C ++ แต่คุณสามารถใช้คลาสกับสมาชิกสาธารณะทั้งหมดได้
public
ทำไมไม่เพียงแค่ให้พวกเขาอยู่ภายในแพ็คเกจอย่างน้อยที่สุด? โดยทั่วไปคลาสแบบนั้นไม่เหมาะสำหรับใช้ใน API (หากเป็นเพียงการnull
อ้างอิงที่เป็นไปได้) ใช้การมองเห็นขั้นต่ำเสมอ!
ด้วย Project JUnion คุณสามารถใช้โครงสร้างใน Java โดยใส่คำอธิบายประกอบคลาสด้วยคำอธิบายประกอบ @Struct
@Struct
class Member {
string FirstName;
string LastName;
int BirthYear;
}
ข้อมูลเพิ่มเติมที่เว็บไซต์ของโครงการ: https://tehleo.github.io/junion/
ใช่ชั้นเรียนคือสิ่งที่คุณต้องการ คลาสกำหนดประเภทของตัวเอง
ใช่ Java ยังไม่มีประเภทโครงสร้าง / ค่า แต่ใน Java เวอร์ชันที่กำลังจะมาถึงเราจะได้รับinline class
ซึ่งคล้ายกับ struct ใน C # และจะช่วยให้เราเขียนโค้ดที่จัดสรรได้ฟรี
inline class point {
int x;
int y;
}
Java 14 ได้เพิ่มการรองรับสำหรับ Records ซึ่งเป็นชนิดข้อมูลที่มีโครงสร้างซึ่งสร้างได้ง่ายมาก
คุณสามารถประกาศบันทึก Java ได้ดังนี้:
public record AuditInfo(
LocalDateTime createdOn,
String createdBy,
LocalDateTime updatedOn,
String updatedBy
) {}
public record PostInfo(
Long id,
String title,
AuditInfo auditInfo
) {}
และคอมไพเลอร์ Java จะสร้างคลาส Java ต่อไปนี้ที่เชื่อมโยงกับAuditInfo
Record:
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 Record สามารถสร้างได้เหมือนกับออบเจ็กต์ 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"
)
);
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการที่คุณสามารถปรับแต่ง Java ประวัติตรวจสอบบทความนี้
โครงสร้างที่ "บริสุทธิ์" ไม่รองรับใน Java เช่น C # รองรับstruct
คำจำกัดความที่แสดงถึงค่าและสามารถจัดสรรได้ตลอดเวลา
ใน Java วิธีที่ไม่เหมือนใครในการหาค่าประมาณของโครงสร้าง C ++
struct Token
{
TokenType type;
Stringp stringValue;
double mathValue;
}
// Instantiation
{
Token t = new Token;
}
โดยไม่ต้องใช้ (บัฟเฟอร์แบบคงที่หรือรายการ) กำลังทำสิ่งที่ชอบ
var type = /* TokenType */ ;
var stringValue = /* String */ ;
var mathValue = /* double */ ;
ดังนั้นเพียงแค่จัดสรรตัวแปรหรือกำหนดแบบคงที่ในคลาส
พร้อมกับ Java 14 มันเริ่มรองรับ Record คุณอาจต้องการตรวจสอบว่าhttps://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/Record.html
และมี Sealed Classes หลัง Java 15 https://openjdk.java.net/jeps/360
firstName
,lastName
และbirthYear
(หรือyearOfBirth
ของหลักสูตร)