Java 泛型方法类型参数声明
因此,good ol'Ditel指出,“所有泛型方法声明都有一个类型参数部分,由方法返回类型前面的尖括号(Java 泛型方法类型参数声明,java,generics,Java,Generics,因此,good ol'Ditel指出,“所有泛型方法声明都有一个类型参数部分,由方法返回类型前面的尖括号()分隔,”(Deitel,2012,斜体强调)。给出的示例如下: public static < T > void printArray (T[] inputArray) { for (T element : inputArray) ( System.out.printlf("%s", element); } 那么,就这么定了。EclipseID
public static < T > void printArray (T[] inputArray)
{
for (T element : inputArray)
(
System.out.printlf("%s", element);
}
那么,就这么定了。EclipseIDE在我尝试编译(Intellisense的Java版本)之前给了我一个警告,指出“类型参数F正在隐藏类型F”。现在,我并不特别信任Ditel for Java,并且逐渐了解到它们并不特别可靠(因为它们经常忽略重要的区别)。所以,我去了我正在做的事情,猜猜看,他们没有提到这类内容,除非你在谈论“上限”类型参数
问题是(有三个方面):
JLS专门指定一个泛型方法作为声明类型参数的方法。()所以这里的混淆是Deital说“所有泛型方法都有一个类型参数部分”,但可能没有明确指出这是它们的定义。更清楚地说,“泛型方法是具有类型参数部分的方法” 如注释中所述,当类声明了类型参数时,不需要在方法中重新声明它们。正如Eclipse所指出的,这样做实际上声明了新的类型参数,隐藏了类声明的类型参数 在类上声明它们时,您可以直接使用它们:
class Pair<F, S> {
F getF() { ... }
S getS() { ... }
void setF(F f) { ... }
void setS(S s) { ... }
}
理解泛型方法使用的最简单示例是其实现,如下所示:
public static <T> T requireNonNull(T obj) {
if(obj == null)
throw new NullPointerException();
return obj;
}
这是最简单的泛型方法。如果它是在类级别上定义的,则不必在方法级别上定义它。泛型方法和泛型类之间有区别。@Jeroenvanevel谢谢,这就是我想要的明确区别。实际上,如果我读下一章的话,可能会有所帮助。他们似乎已经纠正了自己,谢谢你花时间回答!精彩的。
class Pair<F, S> {
F getF() { ... }
S getS() { ... }
void setF(F f) { ... }
void setS(S s) { ... }
}
public static void printArray(Object[] arr) {
for(Object o : arr) {
System.out.printf("%s", o);
}
}
public static <T> T requireNonNull(T obj) {
if(obj == null)
throw new NullPointerException();
return obj;
}
// T is inferred
String hello = Objects.requireNonNull("hello world");
// T is provided as a witness (rarely necessary)
Integer five = Objects.<Integer>requireNonNull(5);