使用Java:我不想浪费人们的时间并在这里发布这篇文章,但是我的谷歌搜索技能让我失败了,我找不到答案。我查看了一些提供的代码,他们使用
public static <E> void printTree(TwoFourTree<E> tf)(作为参考,我们将从红黑树转换为2-4树)。当我第一次解决这个问题时,我会使用而不是甚至不包含在public static void的初始方法声明中。然而,我遇到了问题,尽管在其他地方使用<Integer>而不是<E>,但添加这个<E>解决了我所有的问题。
所以我的问题是,谁能给我解释一下<E>到底是做什么的?
public static <E> void发布于 2012-11-01 00:00:40
这是一个名为Generics的特性。
为什么要使用泛型?好的,下面给出一个场景,它们是有用的。回到“糟糕的过去”,如果你想拥有一个可以处理任何对象的类,你必须用对象来声明它的所有接口,例如
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.发布于 2012-10-31 23:56:52
它创建了一个泛型方法;也就是说,它允许您使用包含任何类型对象的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 ...如果您想了解更多,我想您可能会发现阅读有关泛型方法的this教程会很有帮助。
发布于 2012-11-01 00:00:19
而不是写作
public static Integer ...
public static Double ...
public static Long .....。
您所要做的就是创建泛型方法
public static <E> https://stackoverflow.com/questions/13161902
复制相似问题