[英]What is better to use - abstract method or method with UnsupportedException?
假设我有2个基类,其方法必须在子类中重写:
public abstract class Base1 {
protected abstract void method();
}
public abstract class Base2 {
protected void method() {
throw new UnsupportedOperationException();
}
}
使用的最佳实践是什么:具有默认不支持异常的抽象方法或方法?
两者都不应被视为替代方法。 not-supported
和not-implemented
之间存在差异,理想情况下我们也应该在代码中维护它。
在没有有效和默认实现的情况下使用abstract
方法。
在不允许/不支持操作的方法中使用UnsupportedOperationException
实现。 例如,remove方法应该在Unmodifiable collections(Set / List)等中抛出此异常,请参阅Collections
类。 ( 请注意 ,默认实现可能会向调用者抛出异常)
最佳实践取决于应解决的具体问题。
例如, Set
接口想要包含操作集合的方法,但也希望提供不允许操作的实现。 在后一种情况下,操纵尝试会抛出异常。
另一方面,想象一下类似于javax.servlet.http
的抽象基类HTTPServlet
,但只允许处理GET请求。 此类将doGet
方法声明为抽象,因为没有合理的默认实现,因此必须由继承类提供。
我会选择抽象的方式。 这就是这个用途。 在稀有条件下使用UnsupportedOperationException
,其中您有多个抽象/接口实现,并且大多数实现方法而新实现类不实现。
这应该是罕见的并且应该避免。
你已经在问题中给出了答案:“必须被覆盖” - 你提供的样本中哪一个强制你覆盖? abstract
此外,它在编译时显示问题。
在运行程序之前使用UnsupportedOperationException
不会导致任何问题,这在讨论高质量软件时为时已晚。 而且,如前所述,它有不同的用途。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.