Lambda泛型类型边界

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)

但有些情况下我想尝试解析输入,如果我失败了,请尝试另一个类.正如一种方法一样,泛型确实需要按每次调用推断.

shm*_*sel 7

您可以使用通用方法定义自定义函数接口:

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)