¿Java tiene un análogo de C ++ struct
:
struct Member {
string FirstName;
string LastName;
int BirthYear;
};
Necesito usar mi propio tipo de datos.
java
data-structures
Dmitry
fuente
fuente
firstName
,lastName
ybirthYear
(oyearOfBirth
por supuesto).Respuestas:
Java definitivamente no tiene estructuras :) Pero lo que describe aquí parece una clase de clase JavaBean.
fuente
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.
fuente
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. ; )
fuente
Java no tiene un análogo a las estructuras de C ++, pero puede usar clases con todos los miembros públicos.
fuente
struct
en C ++ es (más o menos ) lo mismo queclass
en C ++.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 posiblesnull
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/
fuente
Sí, una clase es lo que necesitas. Una clase define un tipo propio.
fuente
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; }
fuente
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.
fuente
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
fuente