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

泛型java中的动态数据类型

艾璞瑜
2023-03-14

我有一个客户机正在发送列表 的usecase。任务是迭代并执行此函数,并将其保存在TypedSafeMap中。伪客户端代码:

Function<String, Integer> firstFn = x -> x.length();
Function<String, String> secondFn = x -> x.substring(0);

client.runTheseFunctions(Arrays.asList(firstFn, secondFn));

runtthesefunctions中,任务是执行这些函数并将其保存在TypedSafeMap中,其中键是函数结果类型的数据类型,值是函数的返回。apply();

下面的代码

public static void runTheseFunctions(List<Function<Employee, ?>> lst, Employee o) {
           lst.stream().forEach( x -> {
             typedSafeMap.put(????, x.apply(o));  
        //The key is nothing but the datatype of the x.apply(o).
        //How do I add this in runtime here. Generics is all compile time safety.
           });
    }

共有1个答案

薛经艺
2023-03-14
public static void runTheseFunctions(List<Function<Employee, ?>> lst, Employee o) {
    lst.stream().collect(Collectors.toMap(f -> f.apply(o).getClass(), f -> f.apply(o)));
}
 类似资料:
  • 问题内容: 在Java中,我希望具有以下内容: 但是我明白了 我对基本用途以外的泛型没有什么了解,因此对此没有多大意义。我无法在互联网上找到有关该主题的很多信息,这无济于事。 有人可以通过类似的方式澄清这种使用是否可行吗?另外,为什么我最初的尝试失败了? 问题答案: 你不能在静态方法或静态字段中使用类的泛型类型参数。该类的类型参数仅在实例方法和实例字段的范围内。对于静态字段和静态方法,它们在类的所

  • 问题内容: 如果我有一个使用通用类型的类,例如 如果我知道使用的所有类型(例如本例中的情况),那么在设计时就可以直接键入所有内容: 如果从“我不知道类型”的“某处”获得对象列表会怎样?如何分配类型: 问题答案: Java泛型不是C ++模板。 Java泛型是编译时功能,而不是运行时功能。 这是Java泛型教程的链接。 这永远无法与Java一起使用: 您必须使用多态(例如,每个对象都实现一个已知的接

  • 问题内容: 如果在Java中创建泛型类(该类具有泛型类型参数),则可以使用泛型方法(该方法带有泛型类型参数)吗? 考虑以下示例: 正如您对通用方法所期望的那样,我可以使用任何对象调用的实例: 但是,如果我尝试使用 不 指定泛型类型的实例,则无论传入什么,我都会调用返回, 奇怪的是,如果返回类型是通用类,它将编译(例如(实际上,这可以解释-参见下面的答案)): 此外,如果输入通用类,即使仅使用通配符

  • 如果在Java中创建泛型类(该类具有泛型类型参数),是否可以使用泛型方法(该方法采用泛型类型参数)? 考虑下面的例子: 正如您所期望的那样,对于任何对象,的实例,我都可以调用: 但是,如果我试图使用的实例而不指定泛型类型,那么调用将返回一个

  • 问题内容: 我有一个方法以a 作为参数。 在中,我如何知道a 是还是a 是? 问题答案: 根据用户omain的回答“如果使用<?>,则意味着您将不会在任何地方使用参数化类型。要么转到特定类型(在您的情况下,似乎是),要么转到非常通用的“ 另外,我相信如果您使用问号,编译器将在运行时(类型;有效Java的第119页)消除类型不匹配的情况,绕过擦除,并有效地消除了使用泛型类型所带来的好处? 要回答发问

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