首页 > 解决方案 > 通用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  
    }
}

这不是吗?

是因为在第一个示例中的类是类 Test,而在第二个示例中是 class< T> 吗?

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

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 类中仍然有静态,尽管它与 main 不在同一个类中?

标签: javagenericsstatic

解决方案


区别来自这里:当您拥有一个类时,该类Test<T>的类型T被锁定,您可以将它用于方法参数和返回类型。

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

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

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


推荐阅读