2012-06-04 23 views
8

creo un metodo generico, senza parametri, qualche cosa come:metodo generico senza parametro

private <T> TableCell<T> createTableCell(){ 
return new TableCell<T>(); 
} 

Così, nel mio programma, come chiamare questo metodo per un tipo concreto?

+0

una volta chiamato questo metodo, restituirà il TableCell di Tipo T cioè T detiene il tipo della classe –

+1

Intendevi "return" invece di "Return"? –

+0

Generalmente, quando chiamo questo metodo, restituirà TableCell , ma voglio convertirlo in un tipo concreto, chiamato Classe A e B. Quindi, come ottenere ciò? – Thinhbk

risposta

21

Di solito, il tipo è dedotto, ma è possibile specificare il tipo con la seguente sintassi:

Nota: Hai un errore nella definizione del metodo - non aveva alcun tipo di ritorno:

private <T> TableCell<T> createTableCell(){ 
    return new TableCell<T>(); 
} 

Ecco come si può chiamare:

TableCell<SomeType> tableCell = myObject.<SomeType>createTableCell(); 


Se il metodo non accede tutti i campi, considerare la possibilità di un meth static od, che si potrebbe chiamare come:

TableCell<SomeType> tableCell = MyClass.<SomeType>createTableCell(); 


Per inciso, quando si utilizza questa sintassi, molti si sorprenderanno della tua "eliteness" - è una sintassi non è spesso visto.

+0

sì, hai ragione. Questo è un mio errore. Ad ogni modo, il metodo generico è in una classe non generica, e voglio che l'altro metodo di questa classe chiami questa classe generica, non il metodo di un'altra classe. – Thinhbk

+2

Sì. Ho anche inviato per prima la risposta corretta. (L'altra risposta è stata modificata dopo che il mio è stato pubblicato - penso che abbia copiato il mio). nm. – Bohemian

+0

Grazie per la tua spiegazione, mi aiuta a capire meglio, poiché la sintassi nella definizione del metodo generico di classe vs generico mi rende confuso. – Thinhbk

-2

Chiamate questo metodo nello stesso modo in cui avete chiamato il costruttore al suo interno: createTableCell<TypeName>().

+0

sfortunatamente non funziona. – Thinhbk

+0

Hmm, in tal caso dovresti estendere la firma del metodo per includere un suggerimento sul tipo. Il solito modo per farlo se non si ha davvero nulla di rilevante da passare nel metodo è un parametro 'Classe ' che esiste al solo scopo di specificare il tipo. Quindi chiameresti il ​​metodo come 'createTableCell (TypeName.class)'. – Wormbo

6

Perché il tipo non si può dedurre dal contesto (quando si chiama il metodo) è necessario specificare che quando si chiama in modo folowing:

obj.<MyType>createTableCell() 

dove obj è l'oggetto di una classe/tipo quello contiene quel metodo.

+1

In realtà la sintassi è 'obj. createTableCell() '. – missingfaktor

+0

@missingfaktor si. Grazie. In realtà stavo provando nel frattempo perché ho sempre dimenticato la sintassi in quel caso ... eri più veloce di me –

+0

@missingfaktor: hai ragione. Molte grazie. – Thinhbk