lea*_*hru 2 java generics optional
我希望根据使用泛型的输入从方法返回多个不同的POJO对象响应.POJO不是层次结构的一部分,即完全独立的POJO
//POJO1
class A1 implements Serializable {
// Instance variable with getter and setter
}
//POJO2
class B1 implements Serializable {
// Instance variable with getter and setter
}
class XYZ {
private ObjA objA;
private ObjB objB;
public <T>Optional<T> getResponse(String input) {
if(input.equals("A")) {
return objA.getResponse(); // This returns an optional of POJO A1 or Optional.empty()
} else {
return objB.getResponse(); // This returns an optional of POJO B1 or Optional.empty()
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误 Incompatible types. Required Optional<T> but 'of' was inferred to Optional<T>: no instance(s) of type variable(s) exist so that A1 conforms to T inference variable T has incompatible bounds: equality constraints: T lower bounds: A1
我尝试将通用标签附加到POJO类定义,但无济于事.有人可以指出我在哪里错了吗?
问题是你试图让编译时类型T取决于运行时的值input,这是不可能的.由于该值是动态的,您无法知道将返回哪种类型,因此正确的方法是使用Optional<?>:
public Optional<?> getResponse(String input) {
if(input.equals("A")) {
return objA.getResponse(); // This returns an optional of POJO A1 or Optional.empty()
} else {
return objB.getResponse(); // This returns an optional of POJO B1 or Optional.empty()
}
}
Run Code Online (Sandbox Code Playgroud)
如果值input 是静态已知的,则可以创建具有不同返回类型的2个方法:
public Optional<A1> getResponseA1() {
return objA.getResponse();
}
public Optional<B1> getResponseB1() {
return objB.getResponse();
}
Run Code Online (Sandbox Code Playgroud)
并调用其中一个而不是传递字符串,例如:
// Optional<?> result = xyz.getResponse("A"); // Not this
Optional<A1> result = xyz.getResponseA1(); // But this
Run Code Online (Sandbox Code Playgroud)
或者您可以使用这两种方法,让调用者根据是否知道字符串的值来决定使用哪种方法.
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |