Newsgroup: it.comp.java
Titolo: statement switch con parametro stringa!!

ho un problema con lo statement switch, cioè non riesco a farlo
funzionare se devo testare una variabile stringa, più precisamente ho il
seguente codice :
ArrayList a12 = utility.splitterString((String) al.get(n),":");
switch ((String) a12.get(0))
{
  case "COVER.TIP_VER":
  break;
}
ho provato anche senza (String) ma mi dà un errore di "incompatible
type", grazie a tutti.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 funzionare se devo testare una variabile stringa
Cito dal testo:
http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#35518
 :
"The switch statement transfers control to one of several statements
depending on the value of an expression.
The type of the Expression must be char, byte, short, or int, or a
compile-time error occurs."
Visto che mi sembra strano, cito anche da Eckel:
"The switch statement is a clean way to implement multiway selection (i.e.,
selecting from among a number of different execution paths), but it
requires a selector that evaluates to an integral value, such as int or
char.
If you want to use, for example, a string or a floating-point number as a
selector, it won't work in a switch statement. For non-integral types, you
must use a series of if statements. "
:-(
Alex.
-- 
___________________________________________________________
a p bertolini
(Tribů Digitale Blackmambo: 
www.blackmambo.it
)

 funzionare se devo testare una variabile stringa
Non riesci a farlo funzionare perche' con le stringhe non funziona. :)

 type", grazie a tutti.
Puoi fare così:
Crea una classe di costanti, che contenga una costante static per ogni
stringa che vuoi controllare. Se non sono case-sensitive, mettile tutte
maiuscole:
public class BaseCommandConstants
{
	public final static int STRINGA_UNO = 1;
}
a questo punto, tramite reflection, puoi fare uno scherzetto del genere:
	public int getCommandCode()
	{
		int commandCode = -1;
		BaseCommandConstants base = new BaseCommandConstants();
		Class c = base.getClass();
		Field[] publicFields = c.getFields();
		for (int i = 0; i < publicFields.length; i++)
		{
			String fieldName = publicFields[i].getName();
			Class typeClass = publicFields[i].getType();
			String fieldType = typeClass.getName();
			//System.out.println("command : "+command);
			//System.out.println("Name: " + fieldName +", Type: " + fieldType);
			//System.out.println(fieldName.equalsIgnoreCase(this.command));
			if (fieldName.equalsIgnoreCase(this.command))
			{
				try
				{
					commandCode = ((Integer) publicFields[i].get(this.command)).intValue();
					//System.out.println("commandCode: " + commandCode);
				}
				catch (SecurityException e)
				{
					System.out.println(e);
				}
				catch (IllegalAccessException e)
				{
					System.out.println(e);
				}
				break;
			}
			else
			{
				commandCode = BaseCommandConstants.COMMAND_NOT_FOUND;
			}
		}
		return commandCode;
	}
Questo l'ho preso da un mio programmino, dove this.command è la stringa
da ricercare.
In sostanza, il metodo prende il "comando", cerca nella classe
BaseCommandConstants se esiste un campo con lo stesso nome, e se esiste ne
restituisce il valore. In caso contrario restituisce un valore
predeterminato.
Spero sia comprensibile...la reflection non è proprio immediata da capire...
Saluti!
Raffaele