L'équivalent du C# mot-clé "comme" en Java
En Java, est-il possible de tenter une fonte et de revenir null
si la conversion échoue?
Vous devez vous connecter pour publier un commentaire.
En Java, est-il possible de tenter une fonte et de revenir null
si la conversion échoue?
Vous devez vous connecter pour publier un commentaire.
Utilisation:
isAssignableFrom
dans de tels cas.t.isAssignableFrom(o.getClass())
? Pourquoi serait-ce mieux?isInstance()
. Cependant, je ne vois que le nul de la vérification exigée par laisAssignableFrom()
permettrait d'ajouter des complications inutiles.as
, mais ce qui me dérange, le fait que leisInstance
méthode sera invoquée deux fois, en raison de l'utilisation de lacast
la méthode de la classeClass
. En interne, cette méthode utilise laIsIsntance
méthode pour vérifier la compatibilité entre les types. Néanmoins, on peut s'attendre à ce que la JVM peut inline l'cast
code à l'intérieur de laas
fonction et après que la Gigue peut supprimer les appels redondants à l'IsInstance
méthode, mais nous ne pouvons pas être sûr à ce sujet.as
opérateur, car il ne sera pas effectuer toute sorte de type de contrainte. Comme pour C. Ross commentaire, sa suggestion n'a rien à voir avec la question, et il n'a pas à expliquer toute prestation en elle.Vous pouvez utiliser le
instanceof
mot clé pour déterminer si vous pouvez lancer correctement.Bien sûr, il peut être genericied et la fonction, mais je pense que la question a été de savoir ce que signifie Java ont à accomplir cela.
Vous pouvez, mais pas avec une seule fonction en Java:
EDIT: Notez que vous ne pouvez pas faire la B classe générique (pour cet exemple) sans l'ajout de la classe cible (cela a à voir avec le fait qu'un type générique n'est pas disponible pour
instanceof
):as
travaille sur des objets null, cependant....
Je suppose que cela pourrait en quelque sorte fait avec les génériques aussi, mais je pense, mais n'est probablement pas ce qui est nécessaire.
Cette simple méthode reçoit l'Objet et renvoie l'Objet, car la distribution est effectuée dans la méthode client.
Autant que je sache, ce serait (un) de façons de le faire:
Laid, mais il devrait faire ce que vous voulez...
instanceof
de l'opérateur.En Java si une conversion échoue, vous obtiendrez une ClassCastException. Vous pouvez intercepter l'exception et de définir la cible de l'objet à null.
Vous pouvez intercepter l'exception:
ou vérifier le type:
Les deux solutions ci-dessus sont un peu maladroit:
Casting et attraper ClassCastException: la création de l'objet exception peut être coûteux (par exemple, le calcul de la trace de la pile).
La nullCast méthode décrite plus haut signifie que vous avez besoin d'un plâtre méthode pour chaque fonte que vous souhaitez effectuer.
Génériques ne vous parce que de type "effacement" ...
Vous pouvez créer un statique méthode d'assistance qui est garanti pour retourner une instance de votre classe cible ou nulle, puis coulé le résultat sans crainte d'exception:
Exemple d'appel:
vous pouvez gérer cette capture ClassCastException