2009-01-11 6 views
2

J'alloue un tableau de T, T extends Number dans une classe. Je peux le faire de cette façon:Existe-t-il un moyen de transmettre un nombre en tant que paramètre dans Java?

myClass test = new myClass(Double.class, 20); 

Puis le constructeur lui-même:

myClass(Class<T> type, size) 
{ 
    array = (T[]) Array.newInstance(type, size); 
} 

J'aimerais savoir s'il est possible de le faire comme ceci:

myClass(Number n, size) 
{ 
    array = (T[]) Array.newInstance(n.getClass(), size); 
} 

Mais, J'ai essayé d'instancier un objet avec le second constructeur avec:

myClass test = new myClass(Double, 15); 

Et ça ne marche pas. Est-ce que je fais quelque chose de mal, ou est-ce que ce n'est tout simplement pas possible?

Répondre

4

Vous ne pouvez pas utiliser des noms de classe en tant que paramètres d'entrée en Java. Le Object.class a été introduit pour permettre le passage des « noms de classes »

Donc, la réponse est non, vous ne pouvez pas passer Number comme paramètre, mais vous pouvez passer Number.class. C'est ce qu'il est pour :)

** Mise à jour **

également de vous deuxième définition constructeur

myClass(Number n, int size) 
{ 
    array = (T[]) Array.newInstance(n.getClass(), size); 
} 

Il est clair que le paramètre d'entrée est une instance de numéro ou il est sous-classes pas la classe est elle-même. Je sais que c'est évident mais cela rend plus clair pourquoi il n'est pas possible de faire ce que vous avez prévu

1

Vous devez utiliser:

myClass test = new myClass(Double.class, 15); 

Vous étiez absent la partie .class.

+0

Sa question est que vous pouvez le faire sans le .class (juste passer Double) – hhafez

1

Vous devez aussi avoir

myClass(Class<T> type, int size) 
Questions connexes