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

有没有办法不在Java中实现接口方法?,java,Java,我不想让我的类因此变得抽象。例如,我有一个类,它想要实现一个接口,这个接口有大约15-20个方法声明,但对我的类来说只有4-5个方法是重要的 有没有其他方法可以做到这一点?其他方法(将类抽象化)有: 为您不希望在接口本身的类中实现的接口方法提供默认实现(需要Java8或更高版本) 例如: public interface YourInterface { ... default boolean someMethod () { return false; }

我不想让我的类因此变得抽象。例如,我有一个类,它想要实现一个接口,这个接口有大约15-20个方法声明,但对我的类来说只有4-5个方法是重要的

有没有其他方法可以做到这一点?

其他方法(将类抽象化)有:

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

    例如:

    public interface YourInterface {
        ...
        default boolean someMethod () {
            return false;
        }
        ...
    }
    
    public class YourClass implements YourInterface {
        ...
        public boolean someMethod() {
            throw new UnsupportedOperationException();
        }
        ...
    }
    
  • 用抛出异常的空主体实现所有不希望实现的方法。这种方法在集合框架中很常见

    例如:

    public interface YourInterface {
        ...
        default boolean someMethod () {
            return false;
        }
        ...
    }
    
    public class YourClass implements YourInterface {
        ...
        public boolean someMethod() {
            throw new UnsupportedOperationException();
        }
        ...
    }
    
  • (使类抽象化的)备选方案有:

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

    例如:

    public interface YourInterface {
        ...
        default boolean someMethod () {
            return false;
        }
        ...
    }
    
    public class YourClass implements YourInterface {
        ...
        public boolean someMethod() {
            throw new UnsupportedOperationException();
        }
        ...
    }
    
  • 用抛出异常的空主体实现所有不希望实现的方法。这种方法在集合框架中很常见

    例如:

    public interface YourInterface {
        ...
        default boolean someMethod () {
            return false;
        }
        ...
    }
    
    public class YourClass implements YourInterface {
        ...
        public boolean someMethod() {
            throw new UnsupportedOperationException();
        }
        ...
    }
    

  • 您可以使用默认方法,例如

    interface Common {
        default void actionOne() {
            // nothing to do
        }
        // or
        default void actionTwo() {
            throw new UnsupportedOperationException("Must be implemented if used");
        }
    }
    

    或者您可以有多个接口,只实现重要的接口。

    您可以有默认方法,例如

    interface Common {
        default void actionOne() {
            // nothing to do
        }
        // or
        default void actionTwo() {
            throw new UnsupportedOperationException("Must be implemented if used");
        }
    }
    

    或者,您可以有多个接口,并且只实现重要的接口。

    如果可能,修复底层设计问题


    如果您可以创建一个只实现20个方法中的5个的有用类,那么这就意味着接口实际上是由许多独立契约组成的。将这些独立合同分离为单独的接口,并在需要的地方使用所需的任何东西,而不是使用一个只部分实现的大型接口。

    如果可能,修复基础设计问题


    如果您可以创建一个只实现20个方法中的5个的有用类,那么这就意味着接口实际上是由许多独立契约组成的。将这些独立的契约分离为单独的接口,并在需要的地方使用任何需要的东西,而不是只有一个巨大的接口,您只能部分实现。

    其他答案没有提到的一个选项:您可以通过在运行时创建类来实现这一点,例如使用


    这应该很少是您的第一个选项,但它可能很有用。

    其他答案没有提到的一个选项:您可以通过仅在运行时创建类来实现这一点,例如使用


    这应该很少是您的第一个选项,但它可能很有用。

    您可以对15-20的接口使用默认方法,因此,当您实现此接口时,只需要实现没有默认实现的方法,或者将实现类设为接口,并将这4-5个方法设为默认实现。嗯,这就是接口的用途:定义行为。不过,由于
    java-8
    可以定义
    default
    方法。但对我来说,这看起来像是一个设计问题。不要在你的界面中放那么多方法。如果一个界面有15-20个方法,但只有4或5个方法是相关的,那么界面上的设计似乎很糟糕。也许你们应该把它拆开。@boobalan总是在你们希望并没有人调用的代码分支中抛出异常。如果只返回null或不执行任何操作,则当有人调用该问题时,您将很难调试该问题。您可以对15-20的接口使用默认方法,因此当您实现此接口时,只需要实现没有默认实现的方法,或者让实现类成为一个接口,并为这4-5个方法提供一个默认实现。好吧,这就是接口的目的:定义一个行为。不过,由于
    java-8
    可以定义
    default
    方法。但对我来说,这看起来像是一个设计问题。不要在你的界面中放那么多方法。如果一个界面有15-20个方法,但只有4或5个方法是相关的,那么界面上的设计似乎很糟糕。也许你们应该把它拆开。@boobalan总是在你们希望并没有人调用的代码分支中抛出异常。如果您只是返回null或不执行任何操作,那么当有人调用该问题时,您将很难调试该问题。是的,这是唯一一个面临基本问题的答案issue@MarkoPacak但是,如果OP无法控制接口,它可能仍然是无用的。是的,这是唯一面向基础的答案issue@MarkoPacak然而,如果OP无法控制接口,它可能仍然是无用的。