Conversion de chaîne de caractères de type générique
J'ai besoin de convertir la chaîne de valeur de la variable. J'ai trouvé la solution uniquement pour C#. J'en ai besoin en Java.
public class Property<T> {
T value;
public void setValue(String input){
if(value instanceof String){
value= input; //value is type of T not type of string (compilation error)
//incompatible types: String cannot be converted to T
}
if(value instanceof int){
//parse string
}
if(value instanceof boolean){
//parse string
}
...
}
}
si vous ne savez pas ce qui T est, vous ne pouvez pas convertir. Vous pouvez lancer, mais il peut facilement échouer. Une mauvaise conception, dis-je.
Qu'est ce qu'un "type spécifique de générique variable"?
Ce n'est pas logique, comment peut-il ne pas être un
Je veux dire le type de T que je reconnais avec instanceof
Je ne vais pas mentir, je l'ai trouvé par procès & erreur. C'est très obscur pour moi. Mais je n'ai pas l'esprit de sales tours, aussi longtemps qu'ils ne mon enchères xD
Qu'est ce qu'un "type spécifique de générique variable"?
Ce n'est pas logique, comment peut-il ne pas être un
String
si l'argument est de type string.Je veux dire le type de T que je reconnais avec instanceof
Je ne vais pas mentir, je l'ai trouvé par procès & erreur. C'est très obscur pour moi. Mais je n'ai pas l'esprit de sales tours, aussi longtemps qu'ils ne mon enchères xD
OriginalL'auteur SpeedEX505 | 2014-07-05
Vous devez vous connecter pour publier un commentaire.
Qui n'est pas la façon dont il fonctionne. Vous pouvez, cependant, utiliser le polymorphisme, afin d'obtenir un résultat utile.
Solution avec le polymorphisme
Base générique (et abstrait) propriété
Propriété pour les Chaînes
Propriété pour les entiers
Pas sûr de ce que votre objectif réel est, mais cette approche pourrait fonctionner.
Remarque, que
input instanceof T
sera un échec, car le type d'effacement. Il ne va pas marcher.Solution avec
Class<T>
comme argumentÀ donner plus de détails à votre approche, ce serait le travail - mais c'est MOCHE.
Laid et pas très pratique. Aucune idée de pourquoi vous voulez, tbh.
Utilisé comme:
Solution avec
Reflection
Apparemment, il est possible de déterminer le paramètre utilisé pour instancier la propriété.
Cette petite formule magique vous donne simplement que:
Je ne sais même pas comment j'ai réussi à le trouver. Eh bien, nous y voilà:
Et ne me regarde pas, je ne vous en servez pas. J'ai peu de bon sens.
Vous devez passer à la classe de T en argument au constructeur de Propriété. Ensuite, vous pouvez comparer cette classe contre certains types connus et de la direction générale sur elle - mais qu'il est LAID. Polumorphism est là pour être utilisé, elle n'est pas évitée.
Eh bien, il ya en effet un cas d'utilisation de l'homme. Imaginez un simple fichier texte de configuration, XML, webservice résultat (quoi que) vous donne un <string,string> carte et que vous avez réellement besoin que d'une seule méthode générique, disons
<V> V GetValueByKey(string key)
qui vous donne de la valeur correspondant à la clé appropriée, mais d'un type désiré - au lieu de la chaîne.OriginalL'auteur MightyPork