2012-06-04 29 views
8

creo un método genérico sin parámetros, algo como:método genérico con ningún parámetro

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

Por lo tanto, en mi programa, cómo llamar a este método para un tipo concreto?

+0

una vez que se llame a este método, se devolverá el TableCell de tipo T es decir, T tiene el tipo de la clase –

+1

Quiso decir "retorno" en lugar de "retorno"? –

+0

Generalmente, cuando llamo a este método, se volverá TableCell , pero quiero echarlo en un tipo concreto, llamado Clase A y B. Entonces, ¿cómo lograr esto? – Thinhbk

Respuesta

21

Por lo general, el tipo se infiere, pero se puede especificar el tipo con esta sintaxis:

Nota: Usted tiene un error en la definición de su método - no tenía ningún tipo de retorno:

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

Aquí ¿Cómo se le puede llamar:

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


Si el método no tiene acceso a ningún campo, tenga en cuenta lo que es una metanfetamina static OD, lo que ustedes llamarían como:

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


Como acotación al margen, cuando se utiliza esta sintaxis, muchos de contemplar las "eliteness" - es una sintaxis no a menudo.

+0

sí, tienes razón. Este es mi error. De todos modos, el método genérico está en una clase no genérica, y quiero que otro método de esta clase llame a esta clase genérica, no método de otra clase. – Thinhbk

+2

Sí. También publiqué la respuesta correcta primero. (La otra respuesta fue editada después de que se publicó la mía, creo que copió la mía). Nuevo Méjico. – Bohemian

+0

Gracias por su explicación, me ayuda a entender más claro, ya que la sintaxis al definir la clase genérica frente al método genérico me hace confundirme. – Thinhbk

-2

Se podría llamar a este método de la misma manera que llamó el constructor en su interior: createTableCell<TypeName>().

+0

desafortunadamente no funciona. – Thinhbk

+0

Hmm, en ese caso, debería extender la firma del método para incluir una sugerencia de tipo. La forma habitual de hacer que si usted realmente no tiene nada relevante a pasar en el método es una clase parámetro '' que existe con el único propósito de especificar el tipo. A continuación, llamaría al método como 'createTableCell (TypeName.class)'. – Wormbo

6

Debido a que el tipo no puede deducirse del contexto (cuando se llama al método) se tiene que especificar que cuando se llama en la forma folowing:

obj.<MyType>createTableCell() 

donde obj es el objeto de una clase/tipo que contiene ese método.

+1

En realidad, la sintaxis es 'obj. createTableCell() '. – missingfaktor

+0

@missingfaktor sí. Gracias. En realidad estaba tratando en Mientras tanto, porque siempre se me olvida la sintaxis en ese caso ... usted era más rápido que yo –

+0

@missingfaktor: tienes razón. Muchas gracias. – Thinhbk

Cuestiones relacionadas