gpt4 book ai didi

java - API 设计 - 规定方法顺序是一个好习惯吗?

转载 作者:行者123 更新时间:2023-12-01 23:03:38 24 4
gpt4 key购买 nike

public abstract class A { 
private int result=-1;
public void final doExecuteMySpecialAlgorithm() {
result=0;
//do something here and get a new result
//it won't be -1.
}
public int getResult() {
if(result==-1)
throw new RuntimeException("Invoke my special algorithm first!");
return result;
}
}

getResult 方法不是一个糟糕的设计吗?它强制用户在调用另一个方法之前调用它?您将如何解决这个问题?您愿意返回 -1 还是说 null(如果是对象类型)并让调用者弄清楚要返回 null 该怎么办?或者如果你确定它不会为null,但为了返回不为null,你必须在调用getResult方法之前调用另一个方法,你会抛出一个RuntimeException吗? (或者检查异常?)

最佳答案

这里有两种方法。要么使其同步(即 doExecuteMySpecialAlgorithm 实际上返回结果),要么使其异步。

第一个很明显,第二个可以通过返回一个 Future 对象来完成。无论哪种方式,调用者都不需要考虑调用方法的正确顺序。

在某些情况下,强制方法的调用顺序可能是可以的(例如加密类中的 doFinal 方法),但您仍然应该避免以用户指定的方式编写代码仔细考虑他将如何调用你的方法。显然他需要知道要调用什么,但是如果他需要按特定顺序调用 5 个方法,则可能意味着应该只有 1 个方法。

我的意思是,毕竟,如果你想强制调用者调用 method1()method2()method3()为了顺序,你真的应该让他调用 method(),其中调用私有(private)方法 method1()method2()method3 ()。这样你的代码结构良好,但调用者不能通过以错误的顺序调用方法来捏造事情。

关于java - API 设计 - 规定方法顺序是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23148962/

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