什么时候应该使用通用参数,什么时候应该使用父类作为参数

时间:2019-12-23 08:56:31

标签: java

两者之间有什么区别?我应该何时使用它们?

通用:

public static <T extends SomeClass> void doSomething(T class)
{
}

将父类作为参数:

public static void doSomething(SomeClass class)
{
}

1 个答案:

答案 0 :(得分:1)

由于type erasure,这两种方法实际上是相同的。

仅当您从方法中return实例T的实例时,此类泛型才有用。一个简单的例子就是将存储在某个位置的对象转换为期望的类型(这是不安全的,因为我们没有实际检查它是否确实是T的实例,但这是另一回事了

public static <T extends SomeClass> T get(String name) {
    return (T) fancyLookup(name)
}

private static Object fancyLookup(String name) { ... }

所以回答您的问题:

两者之间有什么区别?

没什么,在运行时它们实际上是相同的。

我什么时候应该使用?

最好不要使用泛型,因为它们是相同的,并在不需要泛型的地方引入泛型只会使您的代码复杂化。