Heeft Java een analoog van een C++ struct
:
struct Member {
string FirstName;
string LastName;
int BirthYear;
};
Ik moet mijn eigen gegevenstype gebruiken.
1, Autoriteit 100%
Java heeft absoluut geen structuren 🙂
Maar wat je hier beschrijft, ziet eruit als een JavaBean-soort klasse.
2, Autoriteit 160%
Het equivalent in Java tot een structuur zou
zijn
class Member
{
public String FirstName;
public String LastName;
public int BirthYear;
};
En er is niets mis mee in de juiste omstandigheden. Veel hetzelfde als in C++ echt in termen van wanneer gebruik je struct-verzen wanneer gebruik je een klasse met ingekapselde gegevens.
3, Autoriteit 44%
Java 14 heeft ondersteuning toegevoegd voor records, die gestructureerde gegevenstypen zijn die zeer eenvoudig te bouwen zijn.
U kunt als volgt een Java-record declareren:
public record AuditInfo(
LocalDateTime createdOn,
String createdBy,
LocalDateTime updatedOn,
String updatedBy
) {}
public record PostInfo(
Long id,
String title,
AuditInfo auditInfo
) {}
En de Java-compiler genereert de volgende Java-klasse die is gekoppeld aan de 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 */ }
}
Merk op dat de constructor, accessor-methoden, evenals equals
, hashCode
en toString
voor u zijn gemaakt, dus het is erg handig om Java Records te gebruiken.
Een Java-record kan worden gemaakt zoals elk ander Java-object:
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"
)
);
4, Autoriteit 32%
Eigenlijk een struct in C++ is een klasse (bijvoorbeeld U kunt hier methoden definiëren, het kan worden uitgebreid, het werkt precies zoals een klasse), het enige verschil is dat de standaard toegangsmodfiers zijn ingesteld op het openbaar (voor klassen die ze zijn Standaard ingesteld op privé).
Dit is echt het enige verschil in C++, veel mensen weten dat niet. ; )
5, Autoriteit 26%
Java heeft geen analoog aan C++’s -structies, maar u kunt lessen gebruiken met alle openbare leden.
6, Autoriteit 18%
Ja, Java heeft nog geen struct / value-type. Maar in de aankomende versie van Java gaan we inline class
die vergelijkbaar is met Struct in C # en ons helpt ons toewijzingsvrije code te schrijven.
inline class point {
int x;
int y;
}
7, Autoriteit 13%
Met Project Junion kunt u structuren in Java gebruiken door een klasse met annotatie annotatie te annoteren
@Struct
class Member {
string FirstName;
string LastName;
int BirthYear;
}
Meer info op de website van het project: https://tehleo.github.io/junion/
8, Autoriteit 8%
Ja, een klas is wat je nodig hebt. Een klasse definieert een eigen type.
9, Autoriteit 3%
Structeert “Echt” zuiver worden niet ondersteund in Java. B.v. C # ondersteunt struct
definities die waarden vertegenwoordigen en op elk moment kunnen worden toegewezen.
In Java, de unieke manier om een ​​benadering van C++ -structies
te halen
struct Token
{
TokenType type;
Stringp stringValue;
double mathValue;
}
// Instantiation
{
Token t = new Token;
}
zonder gebruik te maken van een (statische buffer of lijst) doet zoiets als
var type = /* TokenType */ ;
var stringValue = /* String */ ;
var mathValue = /* double */ ;
Dus, wijs eenvoudig variabelen toe of definieer ze statisch in een klasse.
Antwoord 10, autoriteit 2%
Samen met Java 14 begint het Record te ondersteunen. Misschien wilt u controleren dat https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/Record.html
public record Person (String name, String address) {}
Person person = new Person("Esteban", "Stormhaven, Tamriel");
En er zijn verzegelde klassen na Java 15.
https://openjdk.java.net/jeps/360
sealed interface Shape permits Circle, Rectangle {
record Circle(Point center, int radius) implements Shape { }
record Rectangle(Point lowerLeft, Point upperRight) implements Shape { }
}