接口中必须由“实现者”实现的java内部类
我有这个界面:
public interface ISectionListItem {
public int getLayoutId();
public void setProps(View view, int position);
}
但是我希望实现这个接口的所有类都有一个静态类。我想到:
public interface ISectionListItem {
public int getLayoutId();
public void setProps(View view, int position);
static class ViewHolder {};
}
但这并不强迫类“添加未实现的内部类”。无论如何,要完成这一点?有可能吗
谢谢:)
# 1 楼答案
你不能强迫某人创建一个内部类
根据您想要做的最好的事情,您可能会向接口添加一个方法
getViewHolder()
,并创建另一个指定ViewHolder行为的接口# 2 楼答案
由于接口的性质,这是不可能的。接口定义对象的公共行为;如果一个类实现了一个接口,这意味着该类的所有实例都遵守接口定义的约定。因此,接口不能包含静态成员。(这条规则有一个例外,但在这一点上你不应该在意。)
注意术语:静态成员类不是内部类。静态成员类与普通类类似,只是它们位于不同的命名空间中。静态成员类是包含类的实例的而不是成员,就像任何静态类成员都不是“实例模板”的一部分一样。根据定义,内部类不是静态的
那么,为什么我们不能在接口中声明一个真正的(即非静态)内部类呢?这是因为在接口中,您只能定义对象的行为,而不能定义对象的组成方式。接口的全部要点(和美妙之处)是它们将行为(“它做了什么”)与实现(“它是如何做的”)分开。因此,不能在接口中声明内部类,就像不能在接口中声明字段一样
我不知道你想做什么,但你可能想试试下面的方法。让我们调用原始接口
MyInterface
SomeType
SomeType
MyInterface
中声明一个类似public SomeType getInnerClassInstance()
(一个可怕的方法名)的方法请注意,
MyInterface
实例并不是因为getInnerClassInstance()
而被迫实际返回内部类的实例。这是一件好事,因为您不必绑定到特定的实现# 3 楼答案
接口的要点是定义的是契约,而不是实现。如果您真的需要一个实例,那么您应该执行以下操作
并定义一个viewholder界面。同样,这个想法是,你不是在创建一个实现,而是在表达一个契约