2010-09-22 5 views
2
public class A { 
    static class B { 
    } 
} 

public class C { 
    void m(X x) { 
     if (x instanceof A.B) { ... } // not working 
    } 
} 

Есть ли способ проверить, является ли какой-либо объект (x) на самом деле внутренним классом (B) какого-либо класса (A) в этом сценарии?Использовать instanceof со статическим внутренним классом из другого класса

Я получаю эту ошибку, но я, к сожалению, не имею никакого контроля над классами А и В.

Тип AB не виден

+1

Если вы не можете сделать внутренний класс общедоступным (или переместите вызывающего абонента в тот же пакет, что и A). –

ответ

2

Я сделал этот ответ как комментарий, но с небольшим отражением (тип мышления, а не кодирующий вид!), я превращаю его в ответ.

Поскольку у вас нет контроля над A или B, а B имеет доступ к пакету, вы можете видеть его только из классов, которые находятся в том же пакете, что и A. Так что вы могли бы сделать - если вы не хотите переместить C в один и тот же пакет - написать класс утилиты - называть его U - который имеет логическую функцию, беря X и возвращая, является ли это экземпляром AB

+1

+1: Небольшое отражение (тип кодирования, а не мыслящий вид) действительно может это сделать. Но это не путь. –

+0

Что вы подразумеваете под этим? Я добавил новый пакет с тем же именем, что и пакет, в котором A находится в моем проекте, и я могу получить доступ к A.B в классе-помощнике. – HTTPeter

+0

Боюсь, я не понимаю вопроса - или даже это для меня или @donroby. –

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