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

可以使用通用Java方法的通用类型来强制实参的类型吗?

罗安和
2023-03-14
问题内容

我想使用泛型类型来确保方法的参数具有相同的类型,如下所示:

public static <T> void x(T a, T b)

我假设传递给此方法的两个参数(a和b)始终必须具有相同的类型。但是令我惊讶的是,无论传递了什么参数,我都能将任何类型的参数(甚至是基本参数)传递给方法x,就好像T被抹去了Object一样。

到目前为止,我发现的唯一解决方法是使用“ extends”,如下所示:

public static <T, U extends T> void x(T a, U b)

但是,尽管我可以忍受,但这并不是我想要的。

有没有一种方法可以使用泛型类型来强制使用方法的所有参数的类型?


问题答案:

如果我正确理解了您的问题,那么您需要这样做:

x(10, "x");

在编译时失败。现在考虑这样做:

Integer i = 10;
String s = "x";
Object o1 = i;
Object o2 = s;
x(o1, o2);

在这种情况下,它们都是对象-同一类型。我认为没有任何方法可以真正执行所需的操作-
将参数强制转换为对象时,始终可以使用两种不同的类型来调用它而没有任何警告/错误。

您可以像这样使用它来指定要使用的类型:

ClassName.<Type>x(obj1, obj2);

这可能是唯一的方法。



 类似资料:
  • 问题内容: 我在这里问了一些Java问题:如何解析lambda参数的通用类型?,但这有点不同。 我有方法签名: 我可以使用它: 我可以以某种方式解析该实际的泛型类型吗?我的意思是我想进入那种方法。 顺便说一句,我可以解决这样的问题: 但是,如果我们将lambda更改为内联实现,它看起来就不符合要求。 问题答案: 不,这是不可能的。 您无法获得类似的信息,因为泛型会在运行时被擦除。您确实需要传递权限

  • 问题内容: 这是hrert的问题Generic类与其他类型的Collectiongetter的后续文章。如果您可以为我的问题找到更好的标题,请随时对其进行编辑: 下面的代码包含一个具有返回类型方法的通用类和具有返回类型方法的另一个方法,显然与。 现在,如果我实例化一个原始数据(我永远不会做,所以这个问题更多是一个理论问题,以帮助理解正在发生的事情),那么在增强的for循环中调用该方法将不起作用,因

  • 问题内容: 我在某处看到了这种模式: 通过将新类型指定为泛型的实际类型来扩展泛型,此结构有点不寻常。有什么用?此模式有名称吗?有其他替代方式吗? 示例:https://code.google.com/p/selenium/wiki/LoadableComponent 跳到: 编辑:阅读响应后,似乎我需要改变编译器对类型检查的理解。在我的脑海中,我有这种模式的牛肉是,如果两个A需要相同,那么有没有办

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

  • 问题内容: 抱歉,标题似乎令人困惑,但请按示例进行操作。 假设我有一些带有通用类型参数的Java类: 我可以创建一个类型为存储对象的变量,并将通用参数设置为。Java还允许我将该变量分配给另一个变量,但将通用参数设置为通配符类型: 但是,在使用具有泛型参数的类时,如果将该参数的类型设置为泛型,则无法将该类的对象分配给相同类型/泛型的类型,后者(内部/嵌套)参数是通配符类型: 具体的编译错误是: 凭

  • 问题内容: 这就是我想要做的。使用反射,我想获取所有方法及其返回类型(非泛型)。我一直在这样做。但是,当我遇到返回类型未知的方法时,我遇到了限制。 我如何知道方法的返回类型是否通用?我没有奢求在运行时拥有对象。我正在尝试使用Google 或使用抽象类来获取类型信息。我想关联到对象的方法。 有人认为Java不保留通用信息。在这种情况下,为什么第一次强制转换有效而第二次强制转换无效。 任何帮助表示赞赏