1

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

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

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

非常感谢!

4

3 回答 3

1

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

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

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

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

于 2012-05-24T01:11:25.097 回答
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 方法)。有关此类实现,请参见上面的代码块。

于 2012-05-24T01:16:46.083 回答
1

如果我不知道哪个类实现它,如何从接口调用onTouch方法?OnTouchListener

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

MyClass中,您将调用onTouch与任何其他函数相同的方式 - 将 aView和传递MotionEvent给它。

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

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

ArrayList<? extends View.OnTouchListener> myArrayList;
于 2012-05-24T01:35:03.717 回答