Struct do C#

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.

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());

!!!

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

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.

[quote=Thiagosc]!!!

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

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

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

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

Rafael

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?

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

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…

[quote=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?[/quote]

Voce pode fazer de ambas as formas.

Rafael