【发布时间】:2011-12-03 01:56:15
【问题描述】:
第一季度。 java中的类里面可以有接口吗?
第二季度。我可以在接口中拥有一个类吗?
如果是,那么在什么情况下应该使用这些类/接口。
【问题讨论】:
第一季度。 java中的类里面可以有接口吗?
第二季度。我可以在接口中拥有一个类吗?
如果是,那么在什么情况下应该使用这些类/接口。
【问题讨论】:
第一季度。是的 Q2。是的。
在您的类中,您可能需要一个接口的多个实现,这仅与该特定类相关。在这种情况下,让它成为一个内部接口,而不是一个公共/包私有的接口
在您的界面中,您可以定义一些供实现和客户端使用的数据持有者类。
后者的一个例子:
public interface EmailService {
void send(EmailDetails details);
class EmailDetails {
private String from;
private String to;
private String messageTemplate;
// etc...
}
}
【讨论】:
new EmailService.EmailDetails()
static void sendLater(EmailService details, Date d){...} 的形式提供通用操作,允许es.EmailDetails.sendLater(this,dateLater);
我面临着为所有实现接口的类提供通用的复杂操作,这些类显然使用接口的操作。
直到 Java 8 还没出来……
参见http://datumedge.blogspot.hu/2012/06/java-8-lambdas.html(默认方法)
解决方法是:
public interface I
{
public Class U{
public static void complexFunction(I i, String s){
i.f();
i.g(s)
}
}
}
然后就可以轻松调用常用功能(导入I.U后)
U.complexFunction(i,"my params...");
可以进一步完善,用一些更典型的编码:
public interface I
{
public Class U{
I me;
U(I me){
this.me = me;
}
public void complexFunction(String s){
me.f();
me.g(s)
}
}
U getUtilities();
}
class implementationOfI implements I{
U u=new U(this);
U getUtilities(){ return u; }
}
然后调用
I i = new implementationOfI();
i.getUtilities().complexFunction(s);
更辣的招数
这样做的原因是将操作放在一个单独的模块中,而不是让实用程序模块挂在周围,从而允许可扩展的最糟糕的重复实现。
【讨论】: