【问题标题】:How to return a List inside this bounded generic method?如何在这个有界泛型方法中返回一个列表?
【发布时间】:2021-01-25 16:47:56
【问题描述】:

我有课堂响应

public class Response<T extends ResponseData> {
    private final T data;
    //other fields, getters, setters ...
}

和空接口ResponseData:

public interface ResponseData {
}

它将任何对象作为数据,但该对象必须实现我创建的“空”接口,它只是为了强制“数据”元素内返回的所有类都具有相同的超类型

现在的问题是我需要在数据元素中返回一个List,但是:

  1. 我觉得创建一个 ResponseData 实现并不干净,它仅用作我的 List 的包装器

  2. 我不能直接返回List,因为它不属于我的代码,因此我不能让它实现标记接口(@98​​7654327@)

除了说我应该删除标记接口并允许在数据元素中返回任何对象之外,还有其他解决我的问题的方法吗?

nb:我的标记接口的目的是使任何创建的类将在响应中的数据元素内返回,对于任何阅读它们的人来说,清楚它们存在的目的

n.b. :如上面第 1 点所述,我知道存在此解决方案:

class ResponseDataWrapper implements ResponseData{
    private final List<SomeType> responseList;
    
    //getters,setters
}

但它并不干净,因为在这种情况下,List 和响应中的“数据”元素之间没有必要存在一层嵌套(即包装类)

【问题讨论】:

    标签: java spring spring-boot spring-mvc design-patterns


    【解决方案1】:

    有一个像这样返回列表的响应对象:

    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    @Data
    public class SomeCoolResponseForAnApi implements ResponseData{
        private List<SomeObject> theListYouWantToReturn;
    
        @AllArgsConstructor
        @NoArgsConstructor
        @Builder
        @Data
        public static class SomeObject{
            private String name;
            private String age;
        }
    }
    

    PS:我用过lombok,你可以用普通的getter和setter。

    【讨论】:

    • 感谢您的回答,但它没有帮助,看看上面的数字 1,我知道这个解决方案存在但它并不干净,因为响应中的真实数据(列表)现在嵌套在一个对象又在数据元素内部,我想以某种方式摆脱这个对象
    • 我知道您有一个标记接口来明确说明实现它的类是一个响应对象。所以我的回答实际上足以满足你的观点。我相信这是唯一的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 2014-10-16
    • 2020-09-05
    相关资源
    最近更新 更多