Struct do C#

10 respostas
Growth

Olá,

Tenho o seguinte código em C#:

public struct ENV_INFO 
		{
		     public string szText;
                                     public string szType;
  		     public string szVersion;
                                }

Como faço isso em java ?

Obrigado.

10 Respostas

T

A “struct” do C# não existe no Java, embora tenha sido proposta. Em vez disso, defina uma classe que, no seu caso, deve implementar Cloneable.

public class ENV_INFO implements Cloneable {
    public String szText;
    public String szType;
    public String szVersion;
    protected Object clone() {
        ENV_INFO obj = new ENV_INFO();
        obj.szText = szText;
        obj.szType = szType;
        obj.szVersion = szVersion;
    }
}

Se for passar um objeto dessa classe por referência (exemplo: void blablabla (ref ENV_INFO info) no C#), traduza por: void blablabla (ENV_INFO info). Se for passar por valor, passe um clone do objeto desejado. Exemplo: blablabla (env_info.clone());

Thiagosc

!!!

Mas uma struct não passa de uma classe apenas com campos públicos. Mais um engodo do C#.

was

Thiagosc, desculpe, mas a struct do c# não é a mesma coisa que uma class com campos publicos.
As structs tem outras propriedades, dentre elas, a que uma struct não é passada ao um método como referencia, e sim por tipo valor.

Rafael_Steil

Thiagosc:
!!!

Mas uma struct não passa de uma classe apenas com campos públicos. Mais um engodo do C#.

Thiago, nao vacila :wink:

Uma struct eh mais leve que uma class, e tem suas instancias armazenadas na stack, ao inves do heap, como acontece com classes normais.

Rafael

Growth

Thingol,

Antes de mais nada, muito obrigado pelas explicações.

Esqueci de dizer uma coisa: aquela struct do C# tem também métodos dentro dela. Daí não sei o que fazer com esses métodos.

Veja abaixo a struct completa:

public struct ENV_INFO 
		{

			public string szText;

			public string szType;

			public string szVersion;

			public ENV_INFO(string szAtribType, string szAtribVersion, string szBody)
			{

				szText		= szBody;
				szType		= szAtribType;
				szVersion	= szAtribVersion;
			}

			public void Purge()
			{

				szType    = "";
				szText    = "";
				szVersion = "";
			}

		}//end ENV_INFO
Rafael_Steil

Voce nao tem muita escolha - utilize uma classe normal e siga em frente.

Rafael

Growth

Outra dúvida:

A struct do C# está dentro de uma classe.
Como terei que criar uma classe em java para substituir essa struct, terei que criar outro arquivo “.java” para conter essa classe? Não posso criar essa classe dentro da classe que estou trabalhando?

J

http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&ProdTypeId=1&ProdId=730400&ST=SE&franq=170089

Paulo_Silveira

Uma classe no java tambem pode ser alocada na stack se o JIT for esperto o suficiente para detectar que o objeto só tem vida util naquele escopo… Esse é um dos motivos pelos quais o ajva nao tem struct, alem de evitar ter 10 maneiras de fazer a mesma coisa…

Rafael_Steil

Growth:
Outra dúvida:

A struct do C# está dentro de uma classe.
Como terei que criar uma classe em java para substituir essa struct, terei que criar outro arquivo “.java” para conter essa classe? Não posso criar essa classe dentro da classe que estou trabalhando?

Voce pode fazer de ambas as formas.

Rafael

Criado 19 de outubro de 2006
Ultima resposta 20 de out. de 2006
Respostas 10
Participantes 7