Qui est moins cher et préférable: put1 ou put2?Qu'est-ce qui est préférable et moins cher: correspondance de classe vs exception?
Map<String, Animal> map = new Map<String, Animal>();
void put1(){
for (.....)
if (Animal.class.isAssignableFrom(item[i].getClass())
map.put(key[i], item[i]);
void put2(){
for (.....)
try{
map.put(key[i], item[i]);}
catch (...){}
Question révision: La question était pas claire. Permettez-moi de réviser un peu la question. J'ai oublié le casting de sorte que put2 dépend de l'échec de l'exception cast. isAssignableFrom(), isInstanceOf() et instanceof sont similaires d'un point de vue fonctionnel et entraînent donc la même dépense que l'une est une méthode d'inclusion de sous-classes, tandis que la seconde est pour la correspondance exacte et la troisième est la version opérateur. Les méthodes réflectives et les exceptions sont des opérations coûteuses.
Ma question s'adresse à ceux qui ont fait un peu de benchmarking dans ce domaine - qui est moins cher et préférable: instanceof/isassignablefrom vs cast exception?
void put1(){
for (.....)
if (Animal.class.isAssignableFrom(item[i].getClass())
map.put(key[i], (Animal)item[i]);
void put2(){
for (.....)
try{
map.put(key[i], (Animal)item[i]);}
catch (...){}
Il semble que vous surévaluez le problème de la vitesse du processeur. Vous devriez vous préoccuper davantage de ce qu'est un code Java * correct *, clair, lisible et idiomatique. Seulement dans de rares circonstances voudriez-vous pervertir cela juste pour raser quelques cycles d'horloge. –