返回通用 Result<Foo<Bar>>

Mr *_*rly 3 java generics

我有一个泛型类,其中包含 T 类型的结果或错误消息。它有两种方便的创建方法:

public class Result<T> {

    private String errorMessage;
    private T result;

    ...

    public static <S> Result<S> ok(S body) {
        return new ServiceResult<S>(body);
    }

    public static <S> Result<S> error(String errorMessage, Class<S> clazz) {
        return new ServiceResult<S>(errorMessage);
    }

}
Run Code Online (Sandbox Code Playgroud)

使用给定的方法,我能够创建大多数类型的类型保存结果。我现在面临的问题是我无法创建本身是通用类型的错误服务结果。非常欢迎任何帮助!

为了进一步说明问题,假设我想返回类型为 的结果List<String>。如果结果创建成功,我可以使用以下ok()方法创建我的结果:

List<String> myStringList = ...;
Result<List<String>> result = Result.ok(myStringList);
Run Code Online (Sandbox Code Playgroud)

另一方面,如果发生错误并且我想返回相同类型的错误结果,则提供的方法将不起作用,因为无法创建Class<List<String>>

// error, List<String>.class does not compile
Result<List<String>> result = Result.error("Error message", List<String>.class);
// error, result is of type Result<List>
Result<List<String>> result = Result.error("Error message", List.class);
Run Code Online (Sandbox Code Playgroud)

And*_*ner 7

public static <S> Result<S> error(String errorMessage, Class<S> clazz) {
    return new ServiceResult<S>(errorMessage);
}
Run Code Online (Sandbox Code Playgroud)

这实际上并不使用clazz. 因此,删除参数,您就不需要提供值。

Result<List<String>> errorResult = error("whatever");
Run Code Online (Sandbox Code Playgroud)