Я ссылаюсь на этот дубликат вопроса здесь:
Проверка, является ли объект класса подклассом другого объекта класса в Java
У меня есть абстрактный родительский класс с именем 'Figure', у меня есть два подкласса, 'Circle' и 'Rectangle', которые расширяют этот абстрактный родительский класс. Я пытаюсь определить, имеет ли объект Figure тип Circle или тип Rectangle.
Мой оригинальный код:
public boolean isInstanceOfRectangle(Figure figure)
{
boolean isInstance = figure instanceof Rectangle;
System.out.println("instance of rectangle!");
return isInstance;
}
Изучив связанный вопрос выше, я переписал свой код следующим образом:
public boolean isRectangle()
{
boolean isInstance = Figure.class.isAssignableFrom(Rectangle);
System.out.println("instance of rectangle!");
return isInstance;
}
По какой-то причине это не работает, если я не включу в свой основной класс следующее:
public Class<?> Rectangle;
public Class<?> Circle1;
Я не уверен, стоит ли включать это в мой класс, если нет, то мне кажется, что я должен включить его в качестве параметра в свой метод. Я не могу правильно вызвать и протестировать этот метод, потому что я не уверен, какой параметр передать в метод при вызове. Я хотел бы написать что-то вроде:
public void mouseReleased(MouseEvent e)
{
if ((isRectangle(shape1)))
addRectangle((Rectangle)shape1, e.getComponent().getForeground());
else if ((isCircle(shape1)))
addCircle((Circle) shape1, e.getComponent().getForeground());
}
где 'shape1' - объект Figure, для которого создан экземпляр в виде круга или прямоугольника. Поскольку параметр имеет тип Figure, я не уверен, как определить метод isRectangle, чтобы взять объект Figure (абстрактный родительский объект) и определить, для какого именно подкласса он является экземпляром. Или предпочтительно не принимать никаких параметров и просто выполнять работу, используя объект Figure для вызова метода. Я немного запутался, как поступить.
* Редактировать: по предложению пользователя я переписал следующее , которое НЕ работает, потому что в обоих случаях вывод ЛОЖЬ.
Figure circleObj = new Circle(Color.BLUE);
System.out.println(isInstanceOfRectangle(circleObj));
System.out.println(isInstanceOfCircle(circleObj));
public static boolean isInstanceOfRectangle(Figure figure)
{
boolean isInstance = figure instanceof Rectangle;
if (isInstance == true)
System.out.println("instance of rectangle!");
else
System.out.println("is NOT a rectangle");
return isInstance;
}
public static boolean isInstanceOfCircle(Figure figure)
{
boolean isInstance = figure instanceof Circle;
if (isInstance == true)
System.out.println("instance of circle!");
else
System.out.println("is NOT a circle");
return isInstance;
}