java - 通用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 不在同一个类中?
解决方案
区别来自这里:当您拥有一个类时,该类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>
并在该实例上调用方法。
推荐阅读
- javascript - 显示一个元素 5 秒,然后隐藏并显示下一个元素
- linux-kernel - 为什么即使在内核中启用了 CONFIG_SECURITY_SELINUX,SELinux 仍然被禁用?
- jenkins - jenkins 中的 Azure 存储插件在 azure blob 上创建文件夹结构
- java - 如何将元组值解析为 Person 对象?
- angular - 角度组件之间的循环依赖
- angular - angular-timelinejs3 将支持 Angular 6?
- asp.net-core-mvc - asp.net 核心应用程序 (MVC) 中的 auth0 授权
- arrays - 快速从字典数组中获取字典索引?
- android - rxjava 上没有使用 subscribe 的结果
- c# - 从 C# 在 Twilio 中进行呼叫转移