gpt4 book ai didi

java - 根据执行结果返回备选数据结构的方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:01 26 4
gpt4 key购买 nike

假设我有一个查看文件并返回两个结果的函数:已识别和未识别。当它返回已识别的结果时,我希望结果也包含一条消息,但当它无法识别时,不需要任何消息。

public Result checkFile(File file) {
...
}

我可以想到两种方法来实现这一点......

Result 类如下:

class Result {

private Type type;
private String message;

enum Type {
RECOGNIZED, UNRECOGNIZED
}

}

或者这样做:

class Result {
}

class Unrecognized extends Result {
}

class Recognized extends Result {
private String message;
}

我倾向于使用第二种方法,即使我必须使用 instanceof 检查结果,而且我已经读到应该避免使用 instanceof可能,但这样做可以避免在无法识别结果时出现空消息。对于此示例,一条空消息不是什么大问题,但如果有更多数据与识别结果相关联怎么办?对我来说,实例化一个可能包含所有空字段的类似乎是更糟糕的做法。

处理这种情况的最佳做法是什么?是否有一些标准的方法或模式?

最佳答案

两个类可能有点矫枉过正,因为它是同一个对象类。也不需要具有两个值的 enum,它只是重新组合 truefalse。一个 class Result 就足够了,这也消除了对通用 interface 的需求。我完全赞成“没有必要的复杂性”......

class RecognitionResult {

private String message = "default message";
private boolean recognized = false;

public Result() {}

public Result(boolean value) {
this.setRecognised(value);
}

public boolean setRecognised(boolean value) {
this.recognized = value;
}

public boolean setMessage(@NonNull String value) {
this.message = value;
}

public boolean getRecognised() {
return this.recognized;
}

@Nullable
public String getMessage() {
return this.recognized ? this.message : null;
}
}

然后可以简单地做:

return new RecognitionResult(true);

异步回调的接口(interface)可能看起来像这样:

interface Recognition {
void OnComplete(RecognitionResult result);
}

或者如果你真的想优化:

interface Recognition {
void OnSuccess(RecognitionResult result);
void OnFailure(RecognitionException e);
}

关于java - 根据执行结果返回备选数据结构的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55858524/

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