首页 > 解决方案 > 在 Java 中为方法实现泛型返回类型

问题描述

您好,我有几个模型返回类型和一个可以具有任何一种返回类型的休息调用。我想实现泛型或类似的东西,它可以返回预期的类型模型。例如:

考虑到我有 2 个模型 ItemDetails.java 和 ItemDetailsWithTimestamp.java 在一种情况下我需要返回第一个模型,在另一种情况下我想要第二个模型:我尝试了类似的东西:

Test.java

@Test
public void getitemTest() {
    ItemApi itemApi = new ItemApi();
    ItemDetails result = itemApi.getitem(ItemDetails.class);
} 
    
public void getitemWithTimestampTest() {
    ItemApi itemApi = new ItemApi();
    ItemDetailsWithTimestamp result = itemApi.getitem(ItemDetailsWithTimestamp.class);
} 

ItemApi课堂上的方法getitem

public static <T> ResponseEntity<T> getitem(Class<T> type) {
    #somecode for implementing rest calls
    return (ResponseEntity<T>) response;
}

注意:这不是所见的完整代码,而是可能足以解释问题的摘录。上面的代码在运行测试时返回错误:

java.lang.ClassCastException:类 java.util.LinkedHashMap 不能转换为类 myproject.model.ItemDetails(java.util.LinkedHashMap 位于加载器“bootstrap”的模块 java.base 中;myproject.model.ItemDetails 位于未命名的模块中加载程序“应用程序”)

可能是什么问题,是不可能使用这种方法来适应不同的类型,还是我错过了什么。提前致谢,

标签: java

解决方案


处理此问题的一种方法:

interface ItemDetails{}

class ItemDetailDtoWithTimeStamp implements ItemDetails{}

class ItemDetailsWithSomething implements ItemDetails{}

返回时,您的返回类型应为ItemDetails(interface) 和ResponseEntity<ItemDetails>


推荐阅读