Quello che posso restituire se il tipo di ritorno di un metodo è vuoto? (Non invalidare!)
Domanda
Grazie all'uso dei farmaci generici in Java ho finito nel dover implementare una funzione che ha Void
come tipo di ritorno:
public Void doSomething() {
//...
}
e le esigenze del compilatore che torno qualcosa . Per ora sto solo tornando null
, ma mi chiedo se questo è buona pratica di codifica ...
Mi sto chiedendo circa V OID, non v OID. La classe void
, non la parola chiave riservata Void.class
.
Inoltre ho provato Void.TYPE
, new Void()
, <=>, <=>, nessun ritorno a tutti, ma tutto ciò che non funziona affatto. (Per ragioni più o meno evidenti) (Vedere questa risposta per i dettagli)
- Allora, cosa dovrei tornare se il tipo di ritorno di una funzione è <=>?
- Qual è l'uso generale del <=> classe?
Soluzione
Allora, cosa dovrei tornare se il tipo di ritorno di una funzione deve essere
Void
?
Utilizzare return null
. Class<T>
non può essere istanziata ed è semplicemente un segnaposto per il void
tipo di Class<Void>
.
Qual è il punto di
Callable<T>
?
Come notato sopra, si tratta di un segnaposto. <=> è quello che si otterrà indietro se, per esempio, l'uso di riflessione a guardare un metodo con un tipo di ritorno di <=>. (Tecnicamente, si otterrà indietro <=>.) Ha altri usi assortiti in questa direzione, come se si vuole parametrizzare un <=>.
Grazie all'uso dei farmaci generici in Java ho finito nel dover implementare questa funzione
Direi che qualcosa può essere funky con la vostra API se è necessario implementare un metodo con questa firma. Considerare attentamente se c'è un modo migliore per fare ciò che si vuole (forse si può fornire ulteriori dettagli in un diverso, domanda di follow-up?). Sono un po 'sospetto, dal momento che questo è venuto solo fino "a causa dell'uso dei farmaci generici".
Altri suggerimenti
Non c'è modo per istanziare un vuoto, quindi l'unica cosa che si possono di ritorno è nullo.
return null
è la strada da percorrere.
Per rendere chiaro il motivo per cui gli altri suggerimenti ti ha dato non funzionano:
Void.class
e Void.TYPE
punto allo stesso oggetto e sono di tipo Class<Void>
, non di Void
.
Questo è il motivo non è possibile tornare quei valori. new Void()
sarebbe di tipo null
ma che il costruttore non esiste. In realtà, non ha <=> costruttori pubblici e quindi non può essere un'istanza:. Non si può mai avere alcun oggetto di tipo <=> eccezione del polimorfico <=>
Spero che questo aiuti! : -)
Se, per oscuri motivi, è necessario utilizzare questo tipo, allora davvero tornare nulla sembra essere una scelta ragionevole, poiché suppongo valore di ritorno non sarà utilizzato in ogni caso.
Il compilatore vi costringerà a restituire qualcosa comunque.
E questa classe non sembra avere un costruttore pubblico in modo nuovo Void () non è possibile.
proprio come questo.
public Class TestClass {
public void testMethod () {
return;
}
}