Java prend-il en charge les structures?


Java ont un analogue d'un C++ struct:

struct Member {
  string FirstName; 
  string LastName;  
  int BirthYear; 
};

Je dois utiliser mon propre type de données.

Author: piperchester, 2011-03-02

8 answers

Java n'a définitivement pas de structures :) Mais ce que vous décrivez ici ressemble à une sorte de classe JavaBean.

 36
Author: Heiko Rupp, 2011-03-02 13:34:11

L'équivalent en Java d'une structure serait

class Member
{
    public String FirstName; 
    public String LastName;  
    public int    BirthYear; 
 };

Et il n'y a rien de mal à cela dans les bonnes circonstances. Beaucoup de la même chose qu'en C++ vraiment en termes de quand utilisez-vous des versets struct quand utilisez-vous une classe avec des données encapsulées.

 60
Author: Tom Quarendon, 2011-03-02 13:37:33

Java n'a pas d'analogue aux structures de C++, mais vous pouvez utiliser des classes avec tous les membres publics.

 12
Author: Eugene Burtsev, 2014-07-22 05:32:38

Oui, une classe est ce dont vous avez besoin. Une classe définit un propre type.

 5
Author: Markus, 2011-03-02 13:35:31

Les structures "vraiment" pures ne sont pas prises en charge en Java. Par exemple, C# prend en charge les définitions struct qui représentent des valeurs et peuvent être allouées à tout moment.

En Java, la façon unique d'obtenir une approximation des structures C++

struct Token
{
    TokenType type;
    Stringp stringValue;
    double mathValue;
}

// Instantiation

{
    Token t = new Token;
}

Sans utiliser un (tampon statique ou une liste) fait quelque chose comme

var type = /* TokenType */ ;
var stringValue = /* String */ ;
var mathValue = /* double */ ;

Donc, il suffit d'allouer des variables ou de les définir statiquement dans une classe.

 2
Author: Hydroper, 2018-04-06 00:13:01

En fait, une structure en C++ est une classe (par exemple, vous pouvez y définir des méthodes, elle peut être étendue, elle fonctionne exactement comme une classe), la seule différence est que les modfiers d'accès par défaut sont définis sur public (pour les classes, ils sont définis sur private par défaut).

C'est vraiment la seule différence en C++, beaucoup de gens ne le savent pas. ; )

 1
Author: Damian Wojakowski, 2017-12-24 00:41:43

Avec Project JUnion, vous pouvez utiliser des structures en Java en annotant une classe avec @ Struct annotation

@Struct
class Member {
  string FirstName; 
  string LastName;  
  int BirthYear; 
}

Plus d'infos sur le site du projet: https://tehleo.github.io/junion/

 1
Author: Leo, 2018-04-25 10:56:31

Je pense que C# struct est plus intéressant par rapport à la classe Java bean de certaines personnes mentionnées ci-dessus. La structure C # a un avantage: elle n'est pas nullable. En C#, Int32, Int64 sont des structures mais ils se comportent comme un type primitif, donc c'est beaucoup plus sûr pour la boxe/unboxing. En revanche, Java Integer est une classe, cela devient vraiment gênant lors de l'autoboxing/déballage d'une variable int car vous ne saurez pas si vous seriez grillé jusqu'à ce qu'il soit trop tard à l'exécution.

 0
Author: bkydcmpr, 2018-06-05 13:40:12