2015-11-30 3 views
2

Я ищу способ передать аргумент c в instanceof, потому что мне нужно пройти через массив, как показано в коде, но компилятор возвращает ошибку «неизвестный класс c». Как исправить это?Как передать аргумент переменной instanceof?

Class0 a = new Class0(); 
boolean bool; 
Class[] array = new Class[]{Class0.class, Class1.class}; 
for(Class c : array){ 
    if(a instanceof c) 
     bool = true; 
    else 
     bool = false; 
} 

Я знаю, что я мог бы использовать a.getClass(). GetSimpleName() и проверить, если он равен элементу в массиве строк, но я хотел бы, чтобы лучше понять, как использовать ключевое слово InstanceOf и как это работает.

+0

c.getClass() будет решением –

+1

Я беспокоюсь, что это может быть вопрос типа [XY Problem] (http://xyproblem.info/). Вместо того, чтобы сосредоточиться на своем попытке решения, подумайте о том, чтобы рассказать нам о деталях основной проблемы, которую вы пытаетесь использовать для решения этого решения. –

+0

Класс имеет методы 'isAssignableFrom' или' isInstance'. Проверь их. – Pshemo

ответ

9

У вас нет - instanceofОператор всегда принимает имя типа в качестве своего второго операнда. Тем не менее, вы можете использовать Class.isInstanceметод вместо:

bool = c.isInstance(a); 

Обратите внимание на отсутствие, если/другое - любое время у вас есть if (condition) return true; else return false; или тому подобное, вы можете свернуть его. Однако в вашем текущем коде значение bool после цикла будет зависеть только от последнего элемента массива, поскольку вы переназначаете его на каждой итерации.

Вы можете фактически хотите:

boolean bool = false; 
for (Class c : array){ 
    if (c.isInstance(a)) 
     bool = true; 
    } 
} 

(С Java 8 вы можете сделать это с помощью потоков и anyMatch, но это совсем другое дело.)

+2

Правильное мышление, но имя метода на самом деле isInstance(). – Ray

+1

@Ray: Исправлено, спасибо. –

+0

Не следует ли «на самом деле хотеть» использовать тело 'isInstance' вместо' instanceof'? –

Смежные вопросы