Cosa c'è di sbagliato con questo codice:Perché questo metodo non funziona? Java operatore ternario
void bark(boolean hamlet) {
hamlet ? System.out.println("To Bark.") : System.out.println("Not to Bark");
}
Cosa c'è di sbagliato con questo codice:Perché questo metodo non funziona? Java operatore ternario
void bark(boolean hamlet) {
hamlet ? System.out.println("To Bark.") : System.out.println("Not to Bark");
}
Gli operatori ternari non possono avere istruzioni che non restituiscono valori, metodi void
. Hai bisogno di dichiarazioni che hanno valori di ritorno.
È necessario riscriverlo.
void bark(boolean hamlet) {
System.out.println(hamlet ? "To Bark." : "Not to Bark");
}
Si può leggere il motivo per cui nel linguaggio Java Specification, 15.25. Conditional Operator ? :
Si tratta di un errore di compilazione per il secondo o il terzo espressione di operando per essere un'invocazione di un metodo di vuoto.
È necessario fare come suggeriscono molte delle altre risposte e applicare l'operatore condizionale al solo argomento.
Una dichiarazione ternario deve restituire qualcosa, si potrebbe usare un se qui:
void bark(boolean hamlet)
{
if (hamlet)
{
System.out.println("To Bark.")
}
else
{
System.out.println("Not to Bark");
}
}
mi immagino che sia perché l'operatore ternario prevede di assegnare un valore. Prova questo:
void bark(boolean hamlet) {
String result = hamlet ? "To Bark!" : "Not to Bark";
System.out.println(result)
}
Secondo §JLS.15.25:
ConditionalExpression: ConditionalOrExpression ConditionalOrExpression ? Expression : ConditionalExpression
L'operatore condizionale è sintatticamente destra-associativa (gruppi IT da destra a sinistra). Quindi, a? B: c? D: e? F: g significa lo stesso di a? B: (c? D: (e? F: g)).
L'operatore condizionale ha tre espressioni di operando. ? appare tra la prima e la seconda espressione, e: appare tra la seconda e la terza espressione di .
La prima espressione deve essere di tipo booleano o booleano oppure si verifica un errore in fase di compilazione .
Si tratta di un errore in fase di compilazione per l'espressione dell'operando del secondo essere un richiamo di un metodo di annullamento.
Gli operatori ternari devono restituire qualcosa. Così si può mettere dentro l'istruzione print, come ad esempio:
void bark(boolean hamlet)
{
System.out.printf("%s\n", hamlet ? "To Bark." : "Not to Bark");
}
Oppure:
void bark(boolean hamlet)
{
System.out.println(hamlet ? "To Bark." : "Not to Bark");
}
Perché 'printf' quando lo standard Java e l'uso dell'OP sono' println'? – wchargin
Non ho idea, questo è il mio goto. –
grazie per quei collegamenti alle specifiche. Non li avevo mai guardati prima. –