gpt4 book ai didi

java - 在 map 中使用模板

转载 作者:行者123 更新时间:2023-12-02 13:49:22 24 4
gpt4 key购买 nike

我正在编写一个名为arrayToMap()的函数。我原本打算只允许 String 数组,但我认为我可以使其通用,以便任何类型的数组。我尝试了以下代码片段,但它告诉我 T 无法解析为类型:

public Map <T, Integer> arrayToMap( T [] arr ) {    
assert( arr != null ) : "arrayToMap null array";
Map<T,Integer> res = new HashMap<>();
int ind = 0;
for ( T val: arr ) {
res.put(val, ind);
ind++;
}
return res;
}

正确的语法是什么?

最佳答案

签名应更改为:

// Notice the <T>, this is a generic method declaration
public <T> Map <T, Integer> arrayToMap( T [] arr )

这称为通用方法,您可以阅读有关它的更多信息 here 。就像泛型类型声明(类和接口(interface))一样,方法声明也可以是泛型的,这意味着它们可以通过一个或多个类型参数进行参数化,例如 <T>在上面的例子中。

但是,如果您的类是泛型类,即它被声明为泛型类型,则签名可以与原始示例中的相同。

// A generic type declaration <T>
public class MyClass<T> {

// The type T comes from the generic type declaration,
// therefore the generic method declaration is not needed
public Map<T, Integer> arrayToMap(T [] arr) {
...
}
}

但是,通用类对于 OP:s 的原始用例来说可能不是一个好方法,因为 arrayToMap方法种类意味着它是可以在任何类型的数组上使用的通用方法。

关于java - 在 map 中使用模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27971595/

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