¿Java tiene un análogo de C ++ struct
:
struct Member {
string FirstName;
string LastName;
int BirthYear;
};
Necesito usar mi propio tipo de datos.
Respuestas:
Java definitivamente no tiene estructuras :) Pero lo que describe aquí parece una clase de clase JavaBean.
inline class
en algún momento en el futuro cercano que creo que es más como una estructura.
El equivalente en Java a una estructura sería
class Member
{
public String FirstName;
public String LastName;
public int BirthYear;
};
y no hay nada de malo en eso en las circunstancias adecuadas. Al igual que en C ++, realmente en términos de cuándo usa struct versos, cuándo usa una clase con datos encapsulados.
En realidad, una estructura en C ++ es una clase (por ejemplo, puede definir métodos allí, puede extenderse, funciona exactamente como una clase), la única diferencia es que los modificadores de acceso predeterminados están configurados como públicos (para las clases, están configurados como privados por defecto).
Esta es realmente la única diferencia en C ++, mucha gente no lo sabe. ; )
Java no tiene un análogo a las estructuras de C ++, pero puede usar clases con todos los miembros públicos.
public
, por qué no mantenerlos dentro del paquete al menos? Clases como esa generalmente no son aptas para su uso en una API (aunque solo sea por las posibles null
referencias). ¡Utilice siempre la visibilidad mínima!
Con Project JUnion puedes usar estructuras en Java anotando una clase con la anotación @Struct
@Struct
class Member {
string FirstName;
string LastName;
int BirthYear;
}
Más información en el sitio web del proyecto: https://tehleo.github.io/junion/
Sí, Java aún no tiene el tipo de estructura / valor. Pero, en la próxima versión de Java, obtendremos inline class
una estructura similar a la de C # y nos ayudará a escribir código libre de asignación.
inline class point {
int x;
int y;
}
Las estructuras "realmente" puras no son compatibles con Java. Por ejemplo, C # admite struct
definiciones que representan valores y se pueden asignar en cualquier momento.
En Java, la forma única de obtener una aproximación de las estructuras de C ++
struct Token
{
TokenType type;
Stringp stringValue;
double mathValue;
}
// Instantiation
{
Token t = new Token;
}
sin usar un (búfer estático o lista) está haciendo algo como
var type = /* TokenType */ ;
var stringValue = /* String */ ;
var mathValue = /* double */ ;
Entonces, simplemente asigne variables o defínelas estáticamente en una clase.
Junto con Java 14, comienza a admitir Record. Es posible que desee verificar que https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/Record.html
Y hay clases selladas después de Java 15. https://openjdk.java.net/jeps/360
firstName
,lastName
ybirthYear
(oyearOfBirth
por supuesto).