关于public static <E> void中的<E>的Java
使用Java:我不想浪费人们的时间并在这里发布,但是我的谷歌搜索技巧已经失败了,我找不到答案。 我正在浏览一些提供的代码,然后使用它们
public static <E> void printTree(TwoFourTree<E> tf)
(仅供参考,我们将从红黑树转换为双四树)。 当我第一次接触到这个问题时,我会使用而不是甚至包括在public static void
的初始方法声明中。 然而,我遇到了问题,抛出这个<E>
解决了我所有的问题,尽管在其他地方使用<Integer>
而不是<E>
。
所以我的问题是,有人可以向我解释<E>
究竟做了什么
public static <E> void
这是一种称为泛型的Java特性。
你为什么要使用泛型? 那么,以下给出了一个他们有用的场景。 回到“糟糕的旧时代”,如果你想要一个可以与任何对象一起工作的类,你必须声明所有对象的接口,例如
public class MySuperList
{
public void Add(object a) { }
}
然而,这很糟糕,因为你没有类型安全 - 你可以编写如下的代码:
// Your code
MySuperList list = new MySuperList();
cars.Add(new Car("Ford Mondeo"));// Works
cars.Add(new Fish("Herring")); // Works - which is a shame as a Fish is not a car!
泛型修复了这个问题,允许你强类型化你的类,但以一种通用的方式。 例如:
public class MySuperList<T>
{
// Add method will only accept instances of type T.
public void Add(T a) { }
}
// Your code
MySuperList<Cars> list = new MySuperList<Cars>();
cars.Add(new Car("Ford Mondeo"));// Works
cars.Add(new Fish("Herring")); // Compile-time error.
而不是写作
public static Integer ...
public static Double ...
public static Long ...
...
你所做的只是创建泛型方法
public static <E>
它创建了一个通用的方法; 即它允许你使用一个持有任何类型的对象作为你的参数的TwoFourTree
(在这种情况下)。
例如,如果您只想接受持有List
类型对象的TwoFourTree
,则可以将该方法定义为
public static <E extends List> void ...
如果你只需要Number
对象( Integer
, Double
等),你会这样做
public static <E extends Number> void ...
这是创建这种方法实际上可能有用的原因。 我应该指出,有趣的事情并没有结束,你可以使用多个类型参数来做同样的事情,例如:
public static <T, S extends Number> void ...
如果您想了解更多信息,我想您可能会发现阅读本教程中有关泛型方法的好处。
链接地址: http://www.djcxy.com/p/11381.html上一篇: Java regarding <E> in public static <E> void
下一篇: How to change the concurrent build path separator in Jenkins