Q1。我可以在java中的类中有一个接口吗?
Q2。我可以在界面中有一个类吗?
如果是,那么在哪种情况下应该使用这样的类/接口。
答案 0 :(得分:9)
Q1。是的Q2。是。
在您的课程中,您可能需要多个接口实现,这仅与此特定类相关。在这种情况下,使其成为内部接口,而不是公共/包私有
在您的界面中,您可以定义一些供实现和客户使用的数据持有者类。
后者的一个例子:
public interface EmailService {
void send(EmailDetails details);
class EmailDetails {
private String from;
private String to;
private String messageTemplate;
// etc...
}
}
答案 1 :(得分:2)
我面临为实现接口的所有类提供常见的复杂操作,显然使用了接口的操作。
直到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);
进一步的辛辣技巧
这样做的原因是将操作放在一个模块中,而不是让实用程序模块闲置,从而允许扩展最糟糕的重复实现。