Jon*_*n O 2 java generics lambda
我有以下方法:
public <T> T getObjectFromMessage(Class<T> clazz) {
return gson.fromJson(compressor.decompress(message.getJsonInputs(s3)), clazz);
}
Run Code Online (Sandbox Code Playgroud)
我想将getObjectFromMessage参数作为参数传递给提供给我的lambda.然后,lambda可以提供它希望在消息中找到的对象的类,并获取它的实例.有没有办法在不丢失类型信息的情况下执行此操作?
我可以强制它使用转换和一些Object边界,但我真的希望消费者知道,如果它传入Class<T>它将得到一个T后退,就像任何具有泛型边界的方法.
在消费lambda中,我目前被迫做声明体操,如:
public void consume(Function<Class<Object>, Object> getInputs){
MyType type = (MyType)getInputs.apply(MyType.class);
}
Run Code Online (Sandbox Code Playgroud)
但有些情况下我想尝试解析输入,如果我失败了,请尝试另一个类.正如一种方法一样,泛型确实需要按每次调用推断.
您可以使用通用方法定义自定义函数接口:
interface TypeFunction {
<T> T apply(Class<T> clazz);
}
public void consume(TypeFunction getInputs) {
MyType type = getInputs.apply(MyType.class);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |