Править: Решенный, посмотрите ниже
Привет,
В 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();
Извините за не размышление перед регистрацией....
if (object instanceof MyInterface) {
((MyInterface) object).resolve();
}
MyInterface a = (MyInterface) obj;
a.resolve();
или
((MyInterface)obj).resolve();
Компилятор Java использует статический тип для проверки методов, поэтому вы должны либо отбрасывать объект к типу, который реализует ваш интерфейс или отбрасывает на себя интерфейс.
Вы просто делаете это с помощью типа типа :
((MyInterface) object).resolve();
Обычно лучше всего сделать проверку, чтобы убедиться, что этот актерс действителен - в противном случае вы получите ClassCastexexception . Вы не можете приобретать все, что не реализует MyInterface
в MyInterface
объект. То, как вы делаете этот чек, является оператором
:
if (object instanceof MyInterface) {
// cast it!
}
else {
// don't cast it!
}