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

Java流与泛型的使用

鲁鹤轩
2023-03-14

我有一个下面的课:

@Data
public class PagedSchoolDto {
private final Integer count;
private final Map<String, List<School>> content;
private final String pagingState;
private final Boolean hasNext;

public PagedSchoolDto(final Slice<School> slice) {
    this.content = slice.getContent().stream().collect(
            Collectors.groupingBy(School::getId, () -> new TreeMap<>(new UUIDComparator()), Collectors.toList()));
    this.count = slice.getContent().size();
    this.hasNext = slice.hasNext();
    this.pagingState = getPagingState(slice);
}

@Nullable
private static String getPagingState(final Slice<School> slice) {
    if (slice.hasNext()) {
        CassandraPageRequest pageRequest = (CassandraPageRequest) slice.nextPageable();
        return pageRequest.getPagingState().toString();
    } else {
        return null;
    }
}

}

@Data
public class PagedDto<T> {
private final Integer count;
private final Map<String, List<T>> content;
private final String pagingState;
private final Boolean hasNext;

public PagedDto(final Slice<T> slice) {
    this.content = slice.getContent().stream().collect(
            Collectors.groupingBy(<T>::getId, () -> new TreeMap<>(new UUIDComparator()), Collectors.toList()));
    this.count = slice.getContent().size();
    this.hasNext = slice.hasNext();
    this.pagingState = getPagingState(slice);
}

@Nullable
private static <T> String getPagingState(final Slice<T> slice) {
    if (slice.hasNext()) {
        CassandraPageRequest pageRequest = (CassandraPageRequest) slice.nextPageable();
        return pageRequest.getPagingState().toString();
    } else {
        return null;
    }
}

我的所有类都有一个名为ID的属性,它是类型UUID,所以比较器应该可以在所有泛型类型中正常工作。问题是我不知道如何编写collectors.groupingby的函数和supplier代码,因为第二个代码片段给出了编译错误。

共有1个答案

尹承业
2023-03-14

泛型类型T未指定,例如'Object',它不提供getId方法。为了访问泛型代码中的getId,T必须用getId方法扩展一个接口,该方法由任何与pageddto一起使用的类实现:

public interface WithId {
    UUID getId();
}


public class School implements WithId {

    private UUID id;

    @Override
    public UUID getId() {
        return id;
    }


public class PagedDto<T extends WithId> {
...
 类似资料:
  • 我知道你用 假设有动物超类和狗猫子类。基本上我想要一个包含狗和猫的列表。我发现我可以做到以下几点: 上面的代码可以编译。那么,它是否违反了我为动物主义者写价值观的规则?

  • 问题内容: 我有一个代表文本片段的泛型类。该文本片段可能具有多种不同模式(突出显示的不同类型)中的任何一种。这些模式用枚举表示。每个项目的Enum可能不同,但是它必须实现一个接口,该接口提供了一种将其中两个结合的方法(可以突出显示并加粗显示)。所以我有一个界面: 然后我的TextFragment是文本字符串和模式的容器。但是当我尝试声明该类时: 我收到以下错误: 令牌“扩展”的语法错误,预期 根据

  • 我正在尝试使用GSON库来正确处理一个名为fromJSON的方法 事实上,我有一些类的一个成员可以使用Java泛型来定义。例如,我可以创建一个等。所以我面临的问题是,我需要告诉GSON它应该使用哪一个T。这里是我在一个问题中运行的地方,因为我的当前代码正在将JSON对象转换为或,但是泛型对象不被视为、等,它只是被转换为。 我尝试了一些我在Stackoverflow中找到的答案,但我仍然无法得到正确

  • 如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或

  • 问题内容: 更新: 感谢所有提供帮助的人-这个答案的答案在于我在更复杂的代码中没有注意到的内容以及对Java5协变量返回类型不了解的内容。 原始帖子: 今天早上我一直在玩一些东西。虽然我知道我 可以用 不同的方式解决整个问题,但我发现自己一直迷恋于弄清楚为什么它没有按我预期的那样工作。在花了一些时间阅读这些内容之后,我发现我离理解还很近,因此我将其作为一个问题来看看我是否只是愚蠢,或者是否真的有我