O Java suporta estruturas?
Java tem um análogo de um C++ struct
:
struct Member {
string FirstName;
string LastName;
int BirthYear;
};
Preciso de usar o meu próprio tipo de dados.
8 answers
Java definitivamente não tem estruturas:] Mas o que descreve aqui parece um tipo de classe JavaBean.
O equivalente em Java a uma estrutura seria
class Member
{
public String FirstName;
public String LastName;
public int BirthYear;
};
E não há nada de errado nisso nas circunstâncias certas. O mesmo que em c++ realmente em termos de quando você usa versos do struct quando você usa uma classe com dados encapsulados.
Java não tem uma estrutura analógica para C++, mas você pode usar aulas com todos os membros públicos.
As estruturas" realmente " puras não são suportadas em Java. Por exemplo, C# suporta struct
definições que representam valores e podem ser atribuídas a qualquer momento.
Em Java, a forma única de obter uma aproximação das estruturas C++
struct Token
{
TokenType type;
Stringp stringValue;
double mathValue;
}
// Instantiation
{
Token t = new Token;
}
Sem usar um buffer estático ou uma lista, está a fazer algo como
var type = /* TokenType */ ;
var stringValue = /* String */ ;
var mathValue = /* double */ ;
Então, basta alocar variáveis ou estaticamente defini-las em uma classe.
Na verdade uma estrutura em C++ é uma classe (por exemplo, você pode definir métodos lá, ela pode ser estendida, ela funciona exatamente como uma classe), A única diferença é que os modfiers de acesso padrão são definidos para público (para as classes que são definidas para privado por padrão).
Esta é realmente a única diferença em c++, muitas pessoas não sabem disso. ; )
Com a junção do projecto, poderá usar as estruturas em Java, anotando uma classe com a anotação @Struct
@Struct
class Member {
string FirstName;
string LastName;
int BirthYear;
}
Mais informações no sítio web do projecto: https://tehleo.github.io/junion/
Eu acho que c # struct é mais interessante quando comparado com a classe Java bean algumas pessoas mencionadas acima. A C# struct tem uma vantagem: não é anulável. Em C#, Int32, Int64 são estruturas, mas eles se comportam como um tipo primitivo, então é muito mais seguro para o boxe/descompressão. Em contraste, Java Integer é uma classe, torna-se realmente estranho quando autoboxing/unboxing uma variável int porque você não vai saber se você seria torrado até que seja tarde demais no tempo de execução.