在Java类中定义和声明内部接口的约定?

时间:2017-01-19 04:39:02

标签: java android

我刚刚阅读“Head First Android”并遇到了这段代码,

public class WorkoutListFragment extends ListFragment{
    static interface WorkoutListListener{
        void itemClicked(long id);
    }
}

// Inside the same class there is this Inner Interface 
// declaration of the above Interface, 
// Declaration style : 01
private WorkoutListListener listener;

如果我在下面写这样的代码片段会更好吗?

// why can't i declare the Inner Class like this in the same class,
// Because I write WorkoutListFragment.WorkoutListListener while implementing it,
// Declaration style : 02
private WorkoutListFragment.WorkoutListListener listener;

我的查询是这里的约定,声明样式1还是2?因为正如我在StackOverflow中看到的那样,在实现内部接口时,我们使用外部类或接口名称,然后给出Dot,然后编写内部接口名称。像这样,

public SomeClass implements SomeOuterClass.AnInnerInterface{
....
}

N.B:请注意,评论不在实际代码中。为了清晰起见,我添加了它们。

2 个答案:

答案 0 :(得分:0)

如上所述,您找到的模式是用于Fargment和Activity之间的通信。 有关详细信息,请参阅here

宣言样式1:

如果您想要调用interface的任何方法,

,则可以使用此模式
listener.itemClicked(long id);

将执行实现的方法。

宣言样式2:

此模式用于实现interface,如下所示:

@Override
void itemClicked(long id){
// Add your code here
}

感谢。

答案 1 :(得分:0)

我从你的问题中得到的是,你也不会对约定感到困惑,而是宣传和使用Interface的方式。

如果我们谈论约定,可以通过以下方式使用接口,

 public SomeClass implements SomeOuterClass.AnInnerInterface{
....
}

因为这是你告诉他们的方式#Some; SomeClass"实现" SomeOuterClass"的接口。这意味着" AnInnerInterFace"是" SomeOuterClass"。

中存在的界面

所以这就是你使用public" AnInnerInterFace"这就是你可以访问它的方式。和#34; SomeClass"必须实现它的方法(在接口中声明,即" AnInnerInterface"。你不需要像上面所说的那样得到它的对象

  

private WorkoutListFragment.WorkoutListListener listener;

这种方式不好,没有用,为什么你会在其他课上这样做?接口需要实现。我没理由你为什么要访问它的对象?

所以这是要走的路。但是,如果您想进一步阅读如何以及应该采用什么约定,请考虑阅读this