gpt4 book ai didi

java - 如何将有界泛型类型参数类作为参数传递

转载 作者:行者123 更新时间:2023-11-29 08:40:21 26 4
gpt4 key购买 nike

如何获取类型参数对象的类名?

例子:如果函数是

public <T extends Base> void convert(final T arg) {}
public <T> void method2(Class<T> typeParamClass) {}

我如何将 arg 作为 Class<T> 传递方法 2?

当我尝试传递 arg.getClass() 时出现错误消息

真实代码片段

static <T> byte[] method2(T object, final Class<T> typeParameterClass) throws SerializationException {
}


static <T> T method3(final byte[] serializedObject, final Class<T> typeParameterClass) throws SerializationException {
return (T) serializer.deserialize(typeParameterClass, Buffers.toBuffer(serializedObject));
}
}

public static <T> T clone(final T object) {
return method3(method2(object, object.getClass()), object.getClass());
}

enter image description here

最佳答案

public <T> void method2(Class<T> typeParamClass)

如果你使第二个方法通用,你将能够像这样调用它

public <T extends Base> void convert(final T arg) {
method2(arg.getClass());
}

T 没有限制在method2 ( T extends Object ),因此您可以自由传递任何 T (包括 T extends Base )。

作为Sotirios Delimanolis注意到,T在这里真的没有意义,可以简单地定义方法:

public void method2(Class<?> typeParamClass)

更新:

method2(object, object.getClass())
^^^

这里的主要问题是 getClass()是一个虚方法,返回实例的运行时类型。它不能保证返回 Class<T>来自给定的 T ,但是 ? extends T它可以。要使其编译,您必须将签名更改为:

method2(T object, final Class<? extends T> typeParameterClass)
^^^

关于java - 如何将有界泛型类型参数类作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40699202/

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