泛型 java 中的静态是什么?

what is the static in generic java?

泛型中的“静态”是什么,例如:

    class Test
{
    // A Generic method example
    static <T> void genericDisplay (T element)
    {
        System.out.println(element.getClass().getName() +
                           " = " + element);
    }


// Driver method
 public static void main(String[] args)
 {
     // Calling generic method with Integer argument
    genericDisplay(11);

    // Calling generic method with String argument
    genericDisplay("GeeksForGeeks");

    // Calling generic method with double argument
    genericDisplay(1.0);
 }
}

其中有一个静态,而:

    class Test<T>
{
    // An object of type T is declared
    T obj;
    Test(T obj) {  this.obj = obj;  }  // constructor
    public T getObject()  { return this.obj; }
}
   
// Driver class to test above
class Main
{
    public static void main (String[] args)
    {
        // instance of Integer type
        Test <Integer> iObj = new Test<Integer>(15);  
        System.out.println(iObj.getObject());
   
        // instance of String type
        Test <String> sObj =
                          new Test<String>("GeeksForGeeks");
        System.out.println(sObj.getObject());
        iObj = sObj; //This results an error  
    }
}

这不是吗?

是不是因为在第一个例子中 class 是 class 测试,而在第二个例子中它是 class< T> ?

或者因为在第一个示例中泛型方法与 main 方法在同一 class 中,这就是它具有静态方法的原因?因为考虑以下代码:

public class GenericMethod {
   public static < E> void printArray(E[] inputArray) {
        for(E element : inputArray) {
             System.out.println("%s", element);
         }  
         System.out.println();
   }
}


public class Test {
   public static void main(...) {
      Integer[] intArray = {1,2,3};
      System.out.println("Array integerArray contains:");
      printArray(intArray);
   }
}

GenericMethod class 中仍然有 static,尽管它与 main?class 不在同一个中?

不同之处在于: 当你有一个 class Test<T> 类型 T 被锁定为 class 并且你可以将它用于方法参数和 return 类型。

在另一个示例中,您有一个 class Test,它没有通用类型 T。因此方法 static <T> void genericDisplay (T element) 声明类型 T 以便编译器知道它。

语法<T> void method()static关键字的使用无关。这里使用static意味着可以静态调用一个方法,而不用实例化一个class的实例:GenericMethod.<Integer>printArray(intArray)GenericMethod.printArray(intArray).

在您使用 Test<T> 的示例中,您正在实例化 Test<Integer> 的实例并调用该实例的方法。