Domanda

Non so come dare questo un titolo migliore come io non so davvero che cosa questo modello viene chiamato in Java.

In questo momento ho un metodo con questa firma:

public Directory getDirectory(Class<? extends Directory> type) { ... }

E si chiama in questo modo:

MyDirectory directory = (MyDirectory)getDirectory(MyDirectory.class);

Il vincolo sul tipo assicura che MyDirectory deve derivare da Directory.

Quello che voglio veramente fare è evitare il cast e ridurre la quantità di codice necessario. In C # si potrebbe dire:

MyDirectory directory = getDirectory<MyDirectory>();

C'è un modo per fare questo o qualcosa di simile in Java? Non ho alcun codice Java a partire dalla versione 1.4!

È stato utile?

Soluzione

public <T extends Directory> T getDirectory(Class<T> type) { ... }

MyDirectory directory = getDirectory(MyDirectory.class);

Altri suggerimenti

Beh, si potrebbe evitare il cast cambiando il metodo stesso di essere generico:

public <T extends Directory> T getDirectory(Class<T> type)

e poi:

MyDirectory directory = getDirectory(MyDirectory.class);

Qui si sta utilizzando l'inferenza di tipo dall'argomento per determinare il tipo di T.

Ma si ha a passare il Class<T> in, in quanto altrimenti la cancellazione di tipo entreranno in gioco e il metodo non conoscere il tipo di creare un'istanza di: (

Per ulteriori dettagli di tipo cancellazione e quasi tutto il resto a che fare con i generici Java, vedere di Angelika Langer Java Generics FAQ .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top