Quello che posso restituire se il tipo di ritorno di un metodo è vuoto? (Non invalidare!)

StackOverflow https://stackoverflow.com/questions/676663

  •  21-08-2019
  •  | 
  •  

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?
È stato utile?

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;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top