gpt4 book ai didi

java - 在 Java 中使用异常伪造抽象方法

转载 作者:行者123 更新时间:2023-11-29 05:27:52 25 4
gpt4 key购买 nike

有人问我这个问题,坦率地说,我很困惑:

我们可以尝试用异常来伪造它们,而不是编写抽象方法,就像这样:

public int someMethod(int someparameter) {
throws new RuntimeException("unimplemented");
}

这样做的目的是什么?任何人都可以提供上面试图伪造的抽象方法的代码示例吗?任何帮助是极大的赞赏。谢谢。

最佳答案

我可以想到一个(可能)有效的用例:您有一个抽象类,以及整个项目中扩展它的许多其他类。 (或者抽象类在开源库中,所以您不知道整个宇宙中还有哪些其他类可能从它扩展而来。)现在,您发现向此类添加新的抽象方法很有用。但是,如果您向该类添加 abstract 方法,这会破坏已经扩展它的所有其他类,因为需要更改这些类以包含新方法的覆盖。所以我可以看到,在某些情况下,如何将它们添加为非抽象方法并让它们抛出异常可能被认为更可行,以防扩展它的类使用新方法但忘记写一个覆盖方法。它不会在编译时被捕获,但至少它可能在测试期间被捕获。

我不确定这个原因是否合理,因为也可以定义一个新的抽象类 NewImprovedWhatever 来扩展旧的抽象类,以包含新的方法。不过,这可能会带来自己的维护挑战。我不确定。

我确实注意到 Java 定义了一个抽象类 java.net.SocketImpl,它包含两个非抽象方法,shutdownInput()shutdownOutput() ,其默认实现是抛出异常:

protected void shutdownInput() throws IOException {
throw new IOException("Method not implemented!");
}

注释表明它们是在 1.3 中添加的,所以也许这就是这样做的确切原因,即不需要修改已经扩展了 SocketImpl 的其他类。但我不确定。

无论如何,如果类是从头开始以这种方式设计的,那么这样的设计肯定是非常糟糕的代码。但是,当必须修改现有代码时,我们在类里面学到的不错的 O-O 概念在实践中并不总是那么好。

关于java - 在 Java 中使用异常伪造抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22077172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com