我有一系列的数据传输对象,DTO。它们有一些元素是每个不同的DTO所共有的。一个元素是DTO的集合,因为我们可以一次处理一个列表或一系列这些DTO。我使用了泛型,所以Spring可以处理不同的DTO并传递给UI。下面是我的GenericListDTO()类的一些摘录。
@XmlElement
@NotNull
private Collection<DTO> dataList;
@XmlElement
private int totObjs;
我的DTO构建器是这样定义的:
public static <DTO> GenericListDTOBuilder<DTO> builder() {
return new GenericListDTOBuilder<>();
}
下面是在我的GenericList类中定义的构建器类。
public static class GenericListDTOBuilder<DTO> {
private Collection<DTO> dataList;
public GenericListDTOBuilder<DTO> data(@NotNull Collection<DTO> data) {
this.dataList = dataList;
return this;
}
private int total;
public GenericListDTOBuilder<DTO> total(int total) {
this.total = total;
return this;
}
public GenericListDTO<DTO> build() {
return new GenericListDTO<>(this.data, this.total, this.validUntil);
}
}
}
在类的后面我有这个构造函数。
@NotNull
public static <DTO> GenericListDTO<DTO> just(@NotNull Collection<DTO> dataList) {
return builder().dataList(dataList).total(dataList.size()).build();
}
.dataList(dataList)部分的Intellij给出此错误,“Required type:收藏:收藏。
我不明白为什么当dataList被定义为私有集合dataList时,它会给出这个错误;我传入一个Collection对象。
为了让这个没有错误,我必须双重铸造它。
return(GenericListDTA)builder().dataList((Collection)dataList).total(dataList.size()).build();
为什么它不把dataList识别为DTO的Collection?为什么它默认为Collection
2条答案
按热度按时间1qczuiv01#
问题似乎是在
GenericListDTOBuilder.data()
方法上。您正在分配参数值而不是data
。jjjwad0x2#
这可能是在
just()
方法中推断builder()
的返回类型时出现的问题。有两种方法可以解决这个问题。首先,将
builder()
的返回值提取到一个局部变量,然后调用其上的方法:其次,在调用
builder()
方法时提供类型参数。要获取类型参数,还需要用类名限定静态方法:请注意,静态
just
方法中的类型变量DTO
与类中的类型变量DTO
不同。您最好重命名此类型变量以避免混淆。参见this answer。