gpt4 book ai didi

java - 比较 Java 中的两种泛型类型?

转载 作者:搜寻专家 更新时间:2023-10-31 08:32:16 24 4
gpt4 key购买 nike

我有以下方法:

public <U, V> boolean isEqual(List<U> a, List<V> b) {
// check if U == V
}

我想检查 UV 是否是同一个类。

最佳答案

你不能那样做because of type erasure ,就这么简单。

考虑以下几点:

public static void main(String[] args) {
List<? extends Number> l1 = Arrays.asList(1L, 2, 3L);
List<? extends Number> l2 = Arrays.asList(1);
isEqual(l1, l2);
}

public static <U, V> boolean isEqual(List<U> a, List<V> b) {
// is U == V here?
}

U == V 在这里吗? l1 包含 LongInteger 实例,但 l2 包含单个 Integer 实例。


我从你的评论中猜测:

The first condition should be that their type are the same

你应该拥有的是单一类型 U。在这种情况下,请使用以下签名:

public static <U> boolean isEqual(List<U> a, List<U> b) {

}

这样,上面的代码将无法再编译。


您还可以添加 2 个接受类的参数:

public static <U, V> boolean isEqual(List<U> a, List<V> b, Class<U> uClass, Class<V> vClass) {
if (!uClass.equals(vClass)) {
// classes are different
}
}

在这种情况下,如果给定的类不相同,您可以打印一条消息。

关于java - 比较 Java 中的两种泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34951388/

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