gpt4 book ai didi

java - 如何在参数中正确使用泛型

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

我现在有这个:

  public <T> void run(T x){

if(x instanceof HashMap){
((HashMap<String,String>)x).put("foo","bar");
}

}

但我看到这个警告:

enter image description here

我有三个问题:

  1. 有人知道这个警告是什么意思吗?
  2. 我使用的instanceof操作符对吗?是否有更好/更准确的检查可供使用?
  3. 是否有某种方法可以使用泛型,以便该方法“知道”类型是什么,这样我就不必强制转换类型?

最佳答案

这个T可以是扩展 Object 的任何类型并且您的代码不是类型安全的。如果除了 HashMap<String, String> 之外还有什么传入你可能会得到 ClassCastException 。但使用instance of运算符(operator)将阻止这种情况发生。但仍然任何人都可以将任何对象发送到您的方法。因此,未经检查的警告仅表明这一点。

在这里使用实例对我来说似乎有点尴尬。相反,如果您想向现有映射添加条目,您可以像这样更改通用方法的声明,

public <S, T extends Map<S, S>> void addEntryToMap(T x, S key, S value) {
x.put(key, value);
}

此代码是类型安全的,比上面的检查方法实例更干净、更优雅。

关于java - 如何在参数中正确使用泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54820165/

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