当前位置: 首页 > 知识库问答 >
问题:

无法选择参数化类型

谭池暝
2023-03-14

我想创建一个rest来在服务器和客户端之间进行通信。

下面给出的构造函数:

public class RestHelper<I, R> {
    public RestHelper(String url, I input, Class<R> output){
        ResponseEntity<R> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, output );
    }
}

对于普通类型,我可以执行以下操作:

RestHelper<User, Result> helper = new RestHelper<>(url, user, Result.class);

如何传递泛型类型,如:

ResultContainData<Boolean>

以下代码无效:

    ResultContainData<Boolean> result = new ResultContainData<>();
    RestHelper<User, ResultContainData<Boolean>> helper = new RestHelper<>(url, user, (Class<ResultContainData<Boolean>>) ((ParameterizedType) result.getClass().getGenericSuperclass()).getActualTypeArguments()[0]);

我遇到一个运行时错误:无法强制转换为ParameteredType。

共有2个答案

房学文
2023-03-14

您只能通过在子类定义中捕获I和R来了解它们的值,否则它们会在运行时被擦除。前任:

class MyStringRestHelper extends RestHelper<String, String> {

然后使用TypeTools之类的工具,您可以解析I和R的值:

Class<?>[] typeArgs = TypeResolver.resolveRawArguments(RestHelper.class, MyStringRestHelper.class);
Class<?> i = typeArgs[0];
Class<?> r = typeArgs[1];
assert i == r == String.class;
毕富
2023-03-14

我找到了解决办法

ResultContainData<Boolean> result = new ResultContainData<>();
RestHelper<User, ResultContainData<Boolean>> helper = new RestHelper<>(url, user, (Class<ResultContainData<Boolean>>)result.getClass());

这对我很有效。我仍在寻找更好的解决方案。

 类似资料:
  • 我面临泛型的问题。 下面是我使用泛型的一个类: 在这里,我们的类:使用进行参数化。 我想在我们的一种方法中指定类型,如下所示: 但是,我遇到以下编译器错误:

  • 我试图模拟以进行测试: ClassA ClassA=Mockito。模拟(A类); 莫基托。when(classA.void(Mockito.any)(ClassB 但我有关于“B类”的信息 ClassA无效:ClassA。void(@NotNull ClassB mockito-core-4.0.0,springboot,maven 知道怎么解决吗?

  • 我有一个抽象超类和两个非抽象子类和。如何在超类方法中定义类型,如下所示 我允许在子类方法中编写具体类型(例如,或) 在上面的示例中,子类方法不会覆盖超类方法。

  • 问题内容: 我有一个模块(db.py),它从不同的数据库类型(sqlite,mysql等)加载数据。该模块包含一个db_loader类和从其继承的子类(sqlite_loader,mysql_loader)。 使用的数据库类型在单独的params文件中, 用户如何找回正确的物体? 即我该怎么做: 我是在db.py模块中使用一种称为loader的方法,还是有一种更优雅的方式使类可以根据参数选择自己的

  • 我有一个带有组合框的xaml。由于某种原因,我在那里有一些项目,我不能选择它们,当我选择一个项目时,它通常不允许我更改我的选择,如果它更改了,它仅适用于某些值。这是代码: 我希望我写的很清楚,因为我把它从电脑复制到了手机上。基本上,我有所有的用户,并按部门对他们进行分类。用户只能看到他所在部门的文档,并且可以选择绑定词典中可用的文档。如果不可用,组合框中的项目将为红色且不可检查。这个管用。唯一没有

  • 校验者: @片刻 翻译者: @森系 分数和交叉验证分数 如我们所见,每一个估计量都有一个可以在新数据上判定拟合质量(或预期值)的 score 方法。越大越好. >>> from sklearn import datasets, svm >>> digits = datasets.load_digits() >>> X_digits = digits.data >>> y_digits = digi