Для этого примера:
public class Foo{}
public class Bar extends Foo{}
....
void myMethod(Foo qux){
if (checkInstance(qux,Foo.class)){
....
}
}
Как я могу проверить, если qux
- это экземпляр объекта Foo (но не экземпляр его подкласса фу)? То есть:
Есть ли какое-то заявление, как экземпляром
для этой проверки? или я должен использовать qux.getClass().равно(Foo.class)
Если вы должны сделать это, единственный способ будет getClass().равно(Foo.class) параметр` вы'вэ предложил.
Тем не менее, цель проекта ОО, чтобы позволить вам обращаться любой foo
в той же Моды. Ли или не этот экземпляр подкласс должен иметь никакого значения в нормальной программе.
Если вы ищете точный класс соответствуют лишь qux.getClass().равно(Foo.class)
. оператор instanceof также будет возвращать значение true для подклассов.
вы должны использовать оператор instanceof
if(qux instanceof Foo && !(qux instanceof Bar)) {
...
}
Это работает с классами и интерфейсами, поэтому в большинстве случаев он должен предпочтительнее `.класса, который не работает с интерфейсами.
Я просто попробовал следующий код, кажется, работает нормально
public class BaseClass {
private String a;
public boolean isInstanceOf(BaseClass base){
if(base == null){
return false;
}
else if(getClass() == base.getClass()){
return true;
}else{
return false;
}
}
}
public class DervidClass extends BaseClass {
public boolean isInstanceOf(DervidClass base) {
if(base == null){
return false;
}
else if(getClass() == base.getClass()){
return true;
}else{
return false;
}
}
}
public class myTest {
public static void main(String[] args) throws ParseException {
BaseClass base = new BaseClass();
BaseClass base1 = new BaseClass();
DervidClass derived = new DervidClass();
BaseClass d1 = new DervidClass();
System.out.println(base.isInstanceOf(d1));
System.out.println(d1.isInstanceOf(d1));
System.out.println((d1 instanceof BaseClass));
}
Я прочитал все ответы, которые были размещены до сих пор, но не мог'т найти удовлетворительного ответа. Ответ Для есть какое-то заявление, как экземпляром
для этой проверки? или я должен использовать qux.getClass().равно(Foo.class)
вопрос я бы сказал, Да, есть оператор instanceof оператор в Java, чтобы проверить, если объект является экземпляром класса. Ниже приведен пример:
class Vehicle {
}
class Car extends Vehicle {
}
public class Research {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
if (vehicle instanceof Vehicle) {
System.out.println("vehicle instanceof Vehicle : TRUE");
} else {
System.out.println("vehicle instanceof Vehicle : FALSE");
}
if (vehicle instanceof Car) {
System.out.println("vehicle instanceof Car : TRUE");
} else {
System.out.println("vehicle instanceof Car : FALSE");
}
System.out.println();
Car car = new Car();
if (car instanceof Vehicle) {
System.out.println("car instanceof Vehicle : TRUE");
} else {
System.out.println("car instanceof Vehicle : FALSE");
}
if (car instanceof Car) {
System.out.println("car instanceof Car : TRUE");
} else {
System.out.println("car instanceof Car : FALSE");
}
}
}
Выход:
vehicle instanceof Vehicle : TRUE
vehicle instanceof Car : FALSE
car instanceof Vehicle : TRUE
car instanceof Car : TRUE
Описание:оператор instanceof оператор говорит если объект-это экземпляр класса или его'родительские классы S (до любого уровня).<БР>
автомобиль экземпляром автомобиля : линии ложного` продукции, указывающее, что оператор instanceof оператор не скажет, если объект является экземпляром его подклассов&.ЛТ;БР>
Другой способ-использовать getClass().равно(Foo.class), чтобы определить, если объект является экземпляром класса или нет. Давайте посмотрим ниже пример:
class Vehicle {
}
class Car extends Vehicle {
}
public class Research {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
if (vehicle.getClass().equals(Vehicle.class)) {
System.out.println("vehicle instanceof Vehicle : TRUE");
} else {
System.out.println("vehicle instanceof Vehicle : FALSE");
}
if (vehicle.getClass().equals(Car.class)) {
System.out.println("vehicle instanceof Car : TRUE");
} else {
System.out.println("vehicle instanceof Car : FALSE");
}
System.out.println();
Car car = new Car();
if (car.getClass().equals(Vehicle.class)) {
System.out.println("car instanceof Vehicle : TRUE");
} else {
System.out.println("car instanceof Vehicle : FALSE");
}
if (car.getClass().equals(Car.class)) {
System.out.println("car instanceof Car : TRUE");
} else {
System.out.println("car instanceof Car : FALSE");
}
}
}
Выход:
vehicle instanceof Vehicle : TRUE
vehicle instanceof Car : FALSE
car instanceof Vehicle : FALSE
car instanceof Car : TRUE
Описание: это будет понятно из приведенного выше примера, что один(из двух вышеупомянутых) следует выбрали где?<БР>
важные Примечания:
Оператор 1. экземпляром
не будет бросать исключение NullPointerExceptionисключение в случае, если переменная ссылка не указывает на любой объект(т. е. она пустая ссылка). 2.
автомобиль.getClass().равно(Car.class) будет бросать исключение NullPointerExceptionисключение в случае, если "автомобиль" не указывает на любой объект(т. е. она пустая ссылка). Поэтому необходимо разместить дополнительные нуль, проверить с это например машины != значение null &&усилителя; автомобиль.getClass().равно(Car.class)
, чтобы предотвратить его от исключение NullPointerException
.
3. оператором instanceof
говорит если объект-это экземпляр класса или его'родительские классы S (до любого уровня).
4. автомобиль.getClass().равно(Car.class)
расскажет, если объект является экземпляром только класса. (Родитель & суб-классы не рассматриваются вообще)
package com.instance;
public class Foo {
public void instance(Foo f) {
System.out.println("---------");
System.out.println(f.getClass());
System.out.println(getClass());
if (f.getClass() == getClass()) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
package com.instance;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Foo f1 = new Foo();
Foo f2 = new Foo();
Foo f3 = new Bar();
f1.instance(f1);
f1.instance(f2);
f1.instance(f3);
}
}
Ну вы уже знаете, что qux является экземпляром фу (если это'с нулевым...), поэтому просто `qux оператор instanceof бар и проверку на null должно быть все, что вам нужно.