Java - убедитесь, что объект реализует интерфейс - PullRequest
6 голосов
/ 16 января 2010

РЕДАКТИРОВАТЬ: Решено, см. Ниже

Привет

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

Теперь, когда вы пытаетесь вызвать пользовательский метод для универсального объекта в 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();

Извините, что не подумал перед публикацией ....

Ответы [ 3 ]

3 голосов
/ 16 января 2010

Вы просто делаете это с использованием типа :

((MyInterface) object).resolve();

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

if (object instanceof MyInterface) {
    // cast it!
}
else {
    // don't cast it!
}
1 голос
/ 16 января 2010
MyInterface a = (MyInterface) obj;
a.resolve();

или

((MyInterface)obj).resolve();

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

1 голос
/ 16 января 2010
if (object instanceof MyInterface) {
    ((MyInterface) object).resolve();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...