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 (...){}
问题修订:
这个问题不是很清楚。让我稍微修改一下问题。我忘记了转换,所以put2依赖于转换异常失败。isAssignableFrom()、isInstanceOf()和instanceof在功能上相似,因此产生相同的开销,只是第一个方法包括子类,而第二个方法用于精确类型匹配,第三个是操作符版本。反射方法和异常都是昂贵的操作。
我的问题是针对那些在这个领域做过一些基准测试的人——instanceof/isassignablefrom与转换异常哪个更便宜、更可取?
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 (...){}