我正在编写一个名为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;
}
正确的语法是什么?
答案 0 :(得分:6)
签名应更改为:
// Notice the <T>, this is a generic method declaration
public <T> Map <T, Integer> arrayToMap( T [] arr )
这称为泛型方法,您可以阅读更多相关信息here。就像泛型类型声明(类和接口)一样,方法声明也可以是通用的,这意味着它们可以通过一个或多个类型参数进行参数化,例如上面示例中的<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的原始用例的好方法,因为arrayToMap
方法意味着它是一种可以使用的通用方法在任何类型的阵列上。