Допустим, у нас есть метод, который принимает два аргумента o1 и o2 типа Object и возвращает логическое значение. Я хочу, чтобы этот метод возвращал значение true, только когда аргументы являются экземплярами одного и того же класса, например ::10000
foo(new Integer(4),new Integer(5));
Должен вернуть true, однако:
foo(new SomeClass(), new SubtypeSomeClass());
должен вернуть false, а также:
foo(new Integer(3),"zoo");
должен вернуть false.
Я полагаю, что один из способов - сравнить полные имена классов:
public boolean foo(Object o1, Object o2){
Class<? extends Object> c1 = o1.getClass();
Class<? extends Object> c2 = o2.getClass();
if(c1.getName().equals(c2.getName()){ return true;}
return false;
}
Альтернативный условный оператор будет:
if (c1.isAssignableFrom(c2) && c2.isAssignableFrom(c1)){ return true; }
Последняя альтернатива довольно медленная. Есть ли другие варианты этой проблемы?