一尘不染

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

java

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

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)

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

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


阅读 204

收藏
2020-12-03

共1个答案

一尘不染

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

x(10, "x");

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

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

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

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

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

这可能是唯一的方法。

2020-12-03