我有一个泛型类,其中包含 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)
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)