gpt4 book ai didi

Java泛型类型比较

转载 作者:行者123 更新时间:2023-11-28 00:07:39 36 4
gpt4 key购买 nike

我想知道这样的事情在 Java 中是否可行(前面是 C++ 和 Java 的混合)

template<typename T> bool compare(Wrapper wrapper) {
if(wrapper.obj.getClass().equals(T.class))
return true
return false
}

澄清一下,该函数接受一个包含 java.lang.object 的对象,但我希望能够将该包装器传递给这个通用比较函数以检查该对象是否属于特定类型,即

if(compare<String>(myWrapper))
// do x

最佳答案

不,由于erasure,这是不可能的.基本上,compare方法不知道是什么T是。只有一个 compare方法(与 C++ 不同,C++ 中每个 T 都有一个),并且没有给出任何关于它是如何被调用的信息(即,调用者认为它的 T 是什么)。

典型的解决方案是让类(或方法)接受 Class<T> cls , 然后使用 cls.isInstance :

public <T> boolean compare(Wrapper wrapper, Class<T> cls) {
return cls.isInstance(wrapper.obj);
}

// and then, at the call site:
if (compare(wrapper, Foo.class)) {
...
}

当然,这意味着调用站点需要有 Class<T>目的。如果该调用站点本身是一个通用方法,则它需要从其调用者处获取该引用,依此类推。在某些时候,某人 需要知道特定类型是什么,并且有人传入 Foo.class。 .

关于Java泛型类型比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34618307/

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