Java 为什么静态需要连接<;T>;在爪哇?

Java 为什么静态需要连接<;T>;在爪哇?,java,Java,为什么在声明泛型静态方法时需要添加?如果没有,编译器将抛出一个错误: //doesn't compile private static T[] finishToArray(T[] r, Iterator<?> it) {} //compiles private static <T> T[] finishToArray(T[] r, Iterator<?> it) {} //不编译 私有静态T[]finishToArray(T[]r,迭代器it){} //汇

为什么在声明泛型静态方法时需要添加
?如果没有,编译器将抛出一个错误:

//doesn't compile
private static T[] finishToArray(T[] r, Iterator<?> it) {}

//compiles
private static <T> T[] finishToArray(T[] r, Iterator<?> it) {}
//不编译
私有静态T[]finishToArray(T[]r,迭代器it){}
//汇编
私有静态T[]finishToArray(T[]r,迭代器it){}

在泛型类中创建方法时,如下所示:

class MyClass<T> {
    public void doSomething(T input) {}
}
class-MyClass{
公共void doSomething(T输入){}
}
,doSomething属于该类,因此编译器知道类型T(来自周围的类)

如果您有一个静态函数,它可以在任何类中,即使是非泛型类:

class MyClass {
    public static <T> void doSomething(T input) { };
}
class-MyClass{
公共静态无效剂量测定(T输入){};
}
在本例中,如果您省略了,编译器将无法确定要使用的类型

编辑:
更准确地说:编译器将无法确定您正在尝试使用泛型类型,并且会假定“T”是类的实际名称。

当您在泛型类中创建这样的方法时:

class MyClass<T> {
    public void doSomething(T input) {}
}
class-MyClass{
公共void doSomething(T输入){}
}
,doSomething属于该类,因此编译器知道类型T(来自周围的类)

如果您有一个静态函数,它可以在任何类中,即使是非泛型类:

class MyClass {
    public static <T> void doSomething(T input) { };
}
class-MyClass{
公共静态无效剂量测定(T输入){};
}
在本例中,如果您省略了,编译器将无法确定要使用的类型

编辑: 更准确地说:编译器将无法确定您正在尝试使用泛型类型,并假定“T”是类的实际名称。

应该是

private static <T> T[] finishToArray(T[] r, Iterator<T> it) {

}
private static T[]finishToArray(T[]r,迭代器it){
}
因为静态泛型方法需要泛型声明
,并且此声明将不同于此方法所在的类(因为方法也可能位于泛型类中)

公共类MyClass{
私有静态T[]finishToArray(T[]r,迭代器it){
}
}
类和方法可能不同
应该是

private static <T> T[] finishToArray(T[] r, Iterator<T> it) {

}
private static T[]finishToArray(T[]r,迭代器it){
}
因为静态泛型方法需要泛型声明
,并且此声明将不同于此方法所在的类(因为方法也可能位于泛型类中)

公共类MyClass{
私有静态T[]finishToArray(T[]r,迭代器it){
}
}
类和方法可能不同

在非静态方法中,您可以将泛型声明的定义放在类实例上。对于静态方法,您不能这样做,因为它们不需要执行实例。

在非静态方法中,您可以将泛型声明的定义放在类实例上。对于静态方法,您不能这样做,因为它们不需要执行实例。

这里根本不清楚您要问什么。但是,如果您的意思是,在上面的第二个方法声明中,
的作用是什么,请考虑:如果您没有该方法,该方法的返回类型会是什么?请检查区别在于,对象方法使用的类型很可能是在类级别定义的。静态方法不能使用它们,因为通用静态方法的语法就是这样工作的?这里根本不清楚您要问什么。但是,如果您的意思是,在上面的第二个方法声明中,
的作用是什么,请考虑:如果您没有该方法,该方法的返回类型会是什么?请检查区别在于,对象方法使用的类型很可能是在类级别定义的。静态方法不能使用它们,因为泛型静态方法的语法就是这样工作的?