【问题标题】:Java - understanding interfacesJava - 理解接口
【发布时间】:2012-05-24 01:08:49
【问题描述】:

我已经阅读了 Java 中的接口,现在我想创建一个接口,它允许我创建如下结构:

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

所以我想创建类似的接口(类)。如果我不知道哪个类实现它,如何从OnTouchListener 接口调用onTouch 方法?如果我决定将类与接口(不同的库)分开,我怎么知道哪些类实现了这个接口?希望你明白我的意思。

非常感谢!

【问题讨论】:

    标签: java android interface


    【解决方案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*/
    }
    

    instanceof 保留字会告诉您给定对象是否是该类的实例——无论是通过继承还是实现

    David B. 回答了您问题的前半部分——在对象本身上调用 onTouch(arg0, arg1)。

    myObject.onTouch(arg0,arg1);
    

    刚刚看到你的编辑——如果你使用 instanceof 关键字,你可以检查给定的对象是否实现了接口(这意味着它会有 onTouch 方法)。 有关此类实现,请参见上面的代码块。

    【讨论】:

      【解决方案2】:

      任何实现接口的类都必须覆盖接口中列出的方法,因此当您知道某个类是否将为您从接口对象调用的方法提供实现时,您可以高枕无忧。

      要从onTouchListener 调用onTouch,您只需将对象传递给onTouchListener 类型的引用并从那里开始

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

      对于您问题的第二部分,我认为this StackOverflow question 应该对您有用。

      【讨论】:

        【解决方案3】:

        如果我可以从OnTouchListener 接口调用onTouch 方法 不知道是哪个类实现的?

        接口不调用方法。正如向我描述的那样,它们在接口和开发人员之间形成了一种契约,无论什么对象实现了这个接口,它都将具有以下带有以下签名的方法。

        MyClass 中,您可以像调用任何其他函数一样调用onTouch - 将ViewMotionEvent 传递给它。

        如果我知道哪些类实现了这个接口 决定将类与接口(不同的库)分开?

        Javadoc 是您的朋友(作为开发人员)。或者,如果您正在对集合执行某些操作,例如 ArrayListStackQueue 或包含 Objects 的内容,则可以使用以下语法来保证,无论如何,集合您使用的仅包含实现您的接口的对象:

        ArrayList<? extends View.OnTouchListener> myArrayList;
        

        【讨论】:

          猜你喜欢
          • 2014-11-21
          • 2023-03-19
          • 2014-08-21
          • 2015-09-23
          • 1970-01-01
          • 2020-02-13
          • 1970-01-01
          • 1970-01-01
          • 2018-07-29
          相关资源
          最近更新 更多