2017-07-14 8 views
-5

c'est à propos de la compilation de cette méthode, où T est générique. Est-il possible de compiler ceci avec le compilateur javac (Java 1.8) sans avoir d'erreur?Compiler ces lignes en Java - possible en aucune façon?

public class MyGenericClass<T>{ 
    public void someGenericAction(T value){ 
     int key = (int) value; 
    } 
} 

Meilleures salutations de l'Allemagne!

+3

ajouter au moins les informations sur l'erreur que vous obtenez. –

+1

Montrez-nous quels sont vos efforts, nous pouvons alors vous aider – sForSujit

+0

java: types incompatibles: T ne peut pas être converti en int. C'est à peu près tout ce qu'il est POSSIBLE de faire (configurer le compilateur ...). –

Répondre

0

Vous pouvez le faire

class MyGenericClass<T>{ 
     public static <T>void someGenericAction(T value){ 
      int key = (Integer)value; // here is your's 
      System.out.println(key); 
     } 

     public static void main(String[] args){ 
      someGenericAction(12); 
     } 
} 
+0

Comment cela aide-t-il le PO? – EJoshuaS

+0

il suffit de changer son "int" pour "Integer" – divine

+0

Merci pour la réponse. J'ai également essayé ceci et cela fonctionne. Mais pour certaines raisons, j'ai la «tâche» de compiler les lignes mentionnées dans ma question. Compilez simplement sans avoir d'erreur, rien d'autre. Peut-être que ce n'est pas possible mais je n'en étais pas sûr. –

0

Vous demandez essentiellement un hack sale: comment, en général, peut être coercible à un int?

Espérons que T a une méthode toString raisonnable, et exploiter que:

int key = Integer.parseInt(value.toString()); 

Cela au moins la compilation car tous les objets Java ont une méthode toString(). Mais c'est votre travail de gérer la myriade d'exceptions qui pourraient être lancées à l'exécution. Vous pouvez ajouter des surcharges à votre fonction pour d'autres types primitifs et des types spécifiques de T où vous pouvez faire quelque chose de plus sensé que d'utiliser la méthode toString().

+0

Merci pour la réponse, mais est-il possible de compiler mes lignes de code? F.e. changer certains paramètres du compilateur ou des trucs comme ça? –

+0

@ MarvinKrüger: Hope. Je pense vraiment que vous devez repenser votre conception - voir les commentaires de la question. L'approche que je donne ici est "malodorante". – Bathsheba

+0

Je veux juste savoir si c'est généralement possible de compiler en aucune façon ... Je sais que ce n'est absolument pas la meilleure pratique, mais ce n'est pas important :) –

2

Je voudrais certainement espérons que c'est impossible en Java. Il n'y a aucune garantie que n'importe quel type arbitraire puisse être "directement" et catalogué en toute sécurité à un int, ce qui est exactement ce que votre méthode nécessite. En fait, pour la grande majorité des types, ce sera pas être le cas. Qu'est-ce que (int)"abc" même signifie, par exemple? (Cela serait techniquement possible dans la méthode que vous fournissez, étant donné que "abc" est une entrée parfaitement valide pour votre méthode). Cette distribution est clairement absurde et Java ne devrait pas le permettre. Vous pouvez trouver des tonnes de cas comme celui-ci où cette distribution est un non-sens évident.

Cela pourrait également entraîner des bogues subtils dans les cas où cela fonctionne techniquement. Par exemple, (int)11.2 entraînera l'arrondi (il est égal à 11) et, par conséquent, la perte de données.

TL; DR Non, il est impossible, et vous ne voulez qu'il soit possible, soit parce que vous essayez de faire quelque chose qui ne fondamentalement pas de sens.