我不想让我的课为此抽象。对于例如我有一个类想要实现1个接口,它有大约15-20个方法声明,但只有4-5个方法对我的课程很重要。
还有其他选择吗?
答案 0 :(得分:7)
替代方案(使你的课程抽象化)是:
为您不希望在接口本身的类中实现的接口方法提供默认实现(需要Java 8或更高版本)。
例如:
public interface YourInterface {
...
default boolean someMethod () {
return false;
}
...
}
使用抛出异常的空主体实现您不想实现的所有方法。这种方法在集合框架中很常见。
例如:
public class YourClass implements YourInterface {
...
public boolean someMethod() {
throw new UnsupportedOperationException();
}
...
}
答案 1 :(得分:6)
如果可能,请修复基础设计问题。
如果你可以创建一个只能实现20个中的5个方法的有用类,那么这个接口的提示实际上是许多独立合同的混乱。将这些独立的合同分成单独的接口,并在需要的地方使用任何需要的东西,而不是只有部分实现的巨大接口。
答案 2 :(得分:0)
您可以使用默认方法,例如
interface Common {
default void actionOne() {
// nothing to do
}
// or
default void actionTwo() {
throw new UnsupportedOperationException("Must be implemented if used");
}
}
或者您可以拥有多个接口,只实现重要的接口。
答案 3 :(得分:0)
其他答案未提及的一个选项:您可以通过仅在运行时创建类来实现此目的,例如:使用java.lang.reflect.Proxy
。
这应该很少是你的第一选择,但它可能很有用。