当前位置: 首页 > 面试题库 >

Java:使用lambda参数获取通用方法的实际类型

李勇
2023-03-14
问题内容

lambdas在这里问了一些Java问题:如何解析lambda参数的通用类型?,但这有点不同。

我有方法签名:

public <P> void handle(Consumer<P> consumer) {
...
}

我可以使用它lambda

.<Integer>handle(p -> System.out.println(p * 2));

我可以以某种方式解析该实际的泛型类型吗?我的意思是我想进入Integer.class那种handle方法。

顺便说一句,我可以解决这样的问题:

 public <P> void handle(Class<P> pClass, Consumer<P> consumer) {...}

 .handle(Integer.class, p -> System.out.println(p * 2));

但是,如果我们将lambda更改为内联实现,它看起来就不符合要求。


问题答案:

不,这是不可能的。

您无法获得类似的信息T.class,因为泛型会在运行时被擦除。您确实需要传递Class<T>权限才能获得课程本身。

我也闻到一个XY问题。也许您 确实 需要类类型,但是如果没有进一步的信息,这会有点气味。



 类似资料:
  • 问题内容: 我有一个抽象类: 我需要充实的孩子-每个孩子都有自己的孩子 我只找到一种解决方案,但需要编译器参数 这是最好的解决方案吗?没有我们可以做同样的事情吗? 问题答案: 实现此目的的类型安全但很简单的方法是传递令牌“编译器可以看到它的位置”: 如果您执行的是未经检查的强制转换,但您“知道自己在做什么”,并且希望编译器停止抱怨,则正确的方法是将非类型安全但您知道它们的工作位本地化。使用: (我

  • 问题内容: 是否可以获取通用参数的类型? 一个例子: 问题答案: 我曾经偶然发现的一种结构看起来像 因此,似乎有些不可思议的想法使我感到遗憾,我很不了解…对不起。

  • 问题内容: 使用泛型时,我在Java中有一个小问题。我有一堂课: 在方法中,我需要获取类型名称。有没有办法找到字符串使用? (如果创建了,我希望能够做到这一点- 我必须使用通用性,因为我的方法之一必须返回)。 这似乎很容易,但是我不知道如何去做。 问题答案: 由于 类型擦除, 您通常无法执行此操作-的实例不 知道 的类型。如果需要,一种方法是使用类型文字: 然后: 这很丑陋,但这就是类型擦除的作用

  • 问题内容: 说我有一个像这样的父接口/类 还有许多实现通用类型的实现接口。 我可以使用反射来获取的情况下代表我有没有为对象。像这样: 目前,我已经作为参数传递了,但是如果可以的话,我想简化一些事情。 问题答案: 是的,尽管什么其他人说,这个信息 是 可用的,如果你有机会到子类对象。您需要与一起使用。 在您的示例中,“实际”类型参数应返回for 。

  • 问题内容: 我想使用泛型类型来确保方法的参数具有相同的类型,如下所示: 我假设传递给此方法的两个参数(a和b)始终必须具有相同的类型。但是令我惊讶的是,无论传递了什么参数,我都能将任何类型的参数(甚至是基本参数)传递给方法x,就好像T被抹去了Object一样。 到目前为止,我发现的唯一解决方法是使用“ extends”,如下所示: 但是,尽管我可以忍受,但这并不是我想要的。 有没有一种方法可以使用