2010-06-23 7 views
0

J'ai une classe de forme avec une méthode:De quel type devrais-je me servir?

IText getSearchField() 

L'interface IText est quelque chose mis en œuvre par une sous-classe de JTextField appelé MyTextField.

Pour des raisons indépendantes de ma volonté, je ne peux pas obtenir le contrôle de la classe sous forme typée comme MyTextField, comme JTextField, Component, ou toute autre chose dans la hiérarchie de type MyTextField.

J'accède à l'objet de classe de formulaire à partir d'un objet de pilote et souhaite que le pilote définisse le focus sur le champ de recherche récupéré par l'appel.

Je pourrais utiliser la méthode requestFocusInWindow() de la classe Component pour ce faire. Cependant, d'abord je devrais lancer le résultat de l'appel getSearchField() à quelque chose dans la hiérarchie de type MyTextField, puisque l'appel à getSearchField() renvoie un IText.

Ma question est, devrais-je lancer le cast MyTextField? à Component? à quelque chose entre?

Pourquoi? Et qui serait le plus rapide?

Répondre

6

Jeter à la moindre précision dont vous avez besoin. Autrement dit, si A est une superclasse de B et que vous avez seulement besoin de méthodes de A, transtypage en A. Si vous avez aussi besoin de méthodes de B, transtypage en B.

Qui serait le plus rapide? Pourquoi demandez-vous cela? Cela ne ferait pas de différence.

+0

Est-ce que cela signifie que la coulée se produit toujours à la même vitesse, quel que soit le type de lancer? –

+2

L'impact sur les performances de tout plâtre sera négligeable. – Sjoerd

+0

Eh bien, les moulages sont étonnamment chers parce que la JVM doit vérifier au moment de l'exécution que la distribution est en effet légale. Mais je serais très surpris s'il y avait une différence significative dans le temps d'exécution en fonction de ce que vous avez lancé. Ce serait amusant de comparer. Dans tous les cas, la maintenabilité est plus importante qu'un gain de performance mineur, même s'il y en a un. – Jay