gpt4 book ai didi

java - 泛型方法参数的类型

转载 作者:行者123 更新时间:2023-12-03 23:58:34 26 4
gpt4 key购买 nike

假设我有一个带有泛型参数的方法:

public <U> void genericMethod(U param) {
// doStuff
}

我也有两个类,其中一个扩展了另一个:

public class A {}
public class B extends A {}

我这样做:

A var = new B();
genericMethod(var);

genericMethod中,U的类型是什么?

我传递的变量genericMethod被声明为A,但实际上是BU也是输入 AB?

我已尝试对其进行测试,但找不到在运行时获取有关 U 信息的方法。

最佳答案

让我们稍微修改一下您的示例:

public class Example {
static class A {
int x;
}
static class B extends A {}

static <U> U genericMethod(U param) {
int i = param.x; // compile time error
System.out.println(param.getClass()); // prints B
return param;
}

public static void main(String... args) {
A var1 = new B();
A var2 = genericMethod(var1);
B var3 = genericMethod(var1); // compile time error
}
}

从您调用 genericMethod 的角度来看, U 属于 A 类型,所以我们可以将返回值赋给 A,但不能赋给 B。

genericMethod的执行来看, U 的类型为 Object ,因为我们没有给它设置任何界限,所以我们不能,例如,引用A的成员字段。如果我们写static <U extends A> U genericMethod(U param)那么U的类型就是A。

param 的实际运行时类型是 B,如果您调用 getClass() 可以看到

关于java - 泛型方法参数的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66152492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com