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