有没有办法不在Java中实现接口方法?

时间:2018-05-14 10:50:58

标签: java

我不想让我的课为此抽象。对于例如我有一个类想要实现1个接口,它有大约15-20个方法声明,但只有4-5个方法对我的课程很重要。

还有其他选择吗?

4 个答案:

答案 0 :(得分:7)

替代方案(使你的课程抽象化)是:

  1. 为您不希望在接口本身的类中实现的接口方法提供默认实现(需要Java 8或更高版本)。

    例如:

    public interface YourInterface {
        ...
        default boolean someMethod () {
            return false;
        }
        ...
    }
    
  2. 使用抛出异常的空主体实现您不想实现的所有方法。这种方法在集合框架中很常见。

    例如:

    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

这应该很少是你的第一选择,但它可能很有用。