以下是如何使java泛型类将单个项附加到数组的片段 . 如何使appendToArray成为静态方法 . 将static添加到方法签名会导致编译错误 .
public class ArrayUtils<E> {
public E[] appendToArray(E[] array, E item) {
E[] result = (E[])new Object[array.length+1];
result[array.length] = item;
return result;
}
}
3 回答
你唯一能做的就是改变你的签名
Important details:
返回值之前的泛型表达式总是引入(声明)一个新的泛型类型变量 .
此外,类型(
ArrayUtils
)和静态方法(appendToArray
)之间的类型变量永远不会相互干扰 .那么,这意味着什么:在我的回答中
<E>
会隐藏E
,如果该方法不是static
. AND<E>
与ArrayUtils<E>
中的E
无关 .为了更好地反映这一事实,更正确的答案是:
注意
<E>
.静态泛型方法需要与类的泛型声明(
public class ArrayUtils<E>
)分开的通用声明(public static <E>
) .如果编译器在调用静态泛型方法时抱怨类型歧义(在您的情况下再次不太可能,但一般来说,以防万一),这里是如何使用特定类型显式调用静态泛型方法(
_class_.<_generictypeparams_>_methodname_
):只有在编译器无法确定泛型类型时才会发生这种情况,例如,泛型类型与方法参数无关 .
您需要将类型参数移动到方法级别以指示您具有泛型方法而不是泛型类: