繁体   English   中英

什么是更好的使用 - 具有UnsupportedException的抽象方法或方法?

[英]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-supportednot-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM