泛型 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>
的实例并调用该实例的方法。
泛型中的“静态”是什么,例如:
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>
的实例并调用该实例的方法。