public class Main {
static class A {};
static class B {};
public static void main(String[] args) {
Class<?> r1 = new A().getClass();
Class<?> r2 = new B().getClass();
boolean a = (r1 == r2); //it is ok
boolean b = (new A().getClass() == new B().getClass()); //compilation error
}
}
r1 является ссылкой на тип Class<A>
и r2 является ссылкой на тип Class<B>
. Я думаю, это неправильно сравнивать. Но компилятор не создает ошибку в строке «boolean a = (r1 == r2);
« Почему? Как это работает с точки зрения безопасности типа дженериков?сравнения ссылок на общие классы
Например, вы не можете сравнить «boolean c = (new ArrayList<String>() == new ArrayList<Integer>());
», компилятор говорит «несравненные типы».
Если вы хотите проверить класс объекта, используйте 'instanceof'. – m0skit0
Вы имели в виду '.getClass()' в сравнении последнего абзаца? – arootbeer
Но вы не можете сравнивать их таким образом, что OP намеревается –