2010-01-16 7 views
6

EDIT: решаемые см нижеJava - Убедитесь, что объект реализует интерфейс

Привет,

В Java, я получил объект, который может быть любого класса. BUT - этот объект всегда будет реализовывать интерфейс, поэтому, когда я вызываю методы, определенные интерфейсом, этот объект будет содержать этот метод.

Теперь, когда вы пытаетесь вызвать пользовательский метод на универсальном объекте в Java, он пытается использовать типизацию. Как я могу каким-то образом сообщить компилятору, что мой объект реализует этот интерфейс, поэтому вызов метода в порядке.

В принципе, что я ищу что-то вроде этого:

Object(MyInterface) obj; // Now the compiler knows that obj implements the interface "MyInterface" 
obj.resolve(); // resolve() is defined in the interface "MyInterface" 

Как я могу сделать это в Java?

ОТВЕТ: Хорошо, если интерфейс называется MyInterface вы можете просто положить

MyInterface obj; 
obj.resolve(); 

Извините за не думать, прежде чем отправлять ....

+0

* smile * - +1 для вашего последнего замечания :-) –

ответ

1
if (object instanceof MyInterface) { 
    ((MyInterface) object).resolve(); 
} 
1
MyInterface a = (MyInterface) obj; 
a.resolve(); 

или

((MyInterface)obj).resolve(); 

java-компилятор использует статический тип для ch eck для методов, поэтому вам нужно либо передать объект в тип, который реализует ваш интерфейс, либо отбрасывает его непосредственно на интерфейс.

3

Вы просто сделать это с type cast:

((MyInterface) object).resolve(); 

Обычно это лучше сделать проверку, чтобы убедиться, что этот бросок действительно - в противном случае, вы получите ClassCastException. Вы не можете обучать все, что не реализует MyInterface, в объект MyInterface. Как вы делаете эту проверку с оператором instanceof:

if (object instanceof MyInterface) { 
    // cast it! 
} 
else { 
    // don't cast it! 
} 
Смежные вопросы