gpt4 book ai didi

java - 如何定义一个扩展Map或Collection的通用参数?

转载 作者:行者123 更新时间:2023-12-02 10:48:14 25 4
gpt4 key购买 nike

我想定义一个泛型参数,它应该扩展 Map 或 Collection,但我不知道该怎么做:

public <T> void test(T t) {}

我可以把它写成:

public <T extends Map> void test(T t) {}

public <T extends Collection> void test(T t) {}

但我不知道是否可以让 T 在单个方法中扩展 Map 或 Collection。

最佳答案

简短回答:不。

您打算如何处理方法中的 t 参数?由于 MapCollection 仅将 Object 作为其公共(public)父类(super class)型,因此您可以在 t 上调用的唯一方法是那些在对象上的。 (甚至两个接口(interface)上的方法,例如 size(),也会被编译器拒绝。)

考虑到这一点,在这种情况下是否有任何原因不能重载该方法?也就是说,为每个所需的参数类型定义一个实现:

public void test(Map<?,?> t) { ... }
public void test(Collection<?> t) { ... }

如果您出于某种原因不想这样做,那么您似乎同样可以声明采用 Object 的方法并执行该类的运行时类型检查。这在语义上是等效的,因为无论如何您都必须强制转换来调用 MapCollection 特定的方法,尽管这确实意味着类型检查是在编译时完成的,而不是在编译时完成的。运行。不过,Java 的类型系统不允许您表达这种联合类型依赖关系,因此我没有看到任何其他替代方案。

关于java - 如何定义一个扩展Map或Collection的通用参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10512588/

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