Java - понимание интерфейсов

1

Я читал о интерфейсах в Java, и теперь я хочу создать интерфейс, который позволяет мне создать конструкцию, как показано ниже:

public class MyClass implements View.OnTouchListener {
    //Implementation
    public boolean onTouch(View arg0, MotionEvent arg1) {
       /*SOME CODE*/    
       return true;
    }
}

Поэтому я хочу создать аналогичный интерфейс (класс). Как я могу вызвать метод onTouch из интерфейса OnTouchListener если я не знаю, какой класс его реализует? И как я могу узнать, какие классы реализуют этот интерфейс, если я решил отделить классы от интерфейса (разные библиотеки)? Надеюсь, ты понимаешь, что я имею в виду.

Большое спасибо!

Теги:
interface

3 ответа

1
Лучший ответ

Я чувствую, что понимаю часть вашего вопроса.

как я могу узнать, какие классы реализуют этот интерфейс, если я решил отделить классы от интерфейса (разные библиотеки)

используя

MyClass myObject = new MyClass();
if(myObject instanceof myInterface){  //if the object implements the interface
    /*Do Something*/
}
else{
    /*Do Something Else Not Including the Method*/
}

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

Дэвид Б. ответил на первую половину вашего вопроса - вызовите onTouch (arg0, arg1) на самом объекте.

myObject.onTouch(arg0,arg1);

Просто увидели ваше редактирование - если вы используете ключевое слово instanceof, вы можете проверить, реализует ли данный объект интерфейс (что означает, что он будет иметь метод onTouch). См. Вышеуказанный блок кода для такой реализации.

1

Как я могу вызвать метод onTouch из интерфейса OnTouchListener если я не знаю, какой класс его реализует?

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

В MyClass вы будете вызывать onTouch же, как и любую другую функцию - передать в View и MotionEvent.

И как я могу узнать, какие классы реализуют этот интерфейс, если я решил отделить классы от интерфейса (разные библиотеки)?

Javadoc - ваш друг здесь (как разработчик). В качестве альтернативы, если вы делаете что-то в коллекции, например ArrayList, Stack, Queue или что-то, что содержит Objects, вы можете использовать следующий синтаксис, чтобы гарантировать, что независимо от того, какая коллекция вы используете, содержатся только объекты, которые реализовать свой интерфейс:

ArrayList<? extends View.OnTouchListener> myArrayList;
1

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

Чтобы вызвать onTouch из onTouchListener вам просто нужно передать объект в ссылку типа onTouchListener и перейти оттуда

onTouchListener myOnTouchListener = new MyClass();
myOnTouchListener.onTouch(arg0, arg1);

Для второй части вашего вопроса, я думаю, qaru.site/questions/32548/... должен быть вам полезен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню