java Generic Type vs参数的抽象类

时间:2013-09-05 09:08:24

标签: java generics parameters abstract generic-type-argument

我正在学习Java Generic类型。

我有抽象类AbstractInputdata。

public abstract class AbstractInputData {
....
}

一些扩展AbstractInputData

的类
public class Email extends AbstractInputData{
...
}
public class Mobile extends AbstractInputData{
...
}
......

一个。

public class ProcessorA {
public static boolean isCustomData(AbstractInputData abstractInputData) {
....
}
}

public class ProcessorB {
public static <T extends AbstractInputData> boolean isCustomData(T t) {
...
}
}

A和B之间有什么区别吗?

2 个答案:

答案 0 :(得分:5)

唯一的区别是第二种方法通过Reflections显示为通用类型方法。它的行为将是相同的,除了像这样的奇怪案例

processorB.<MyType>isCustomData(t); // won't compile unless t is a MyType

你必须告诉它你希望它匹配什么类型,这不是那么有用的恕我直言。

答案 1 :(得分:2)

由于您的方法只生成一个布尔值,因此没有区别。但是如果您想要返回输入,可以使用B来保留泛型类型:

public class ProcessorB {
  public static <T extends AbstractInputData> boolean isCustomData(T t) {
    ...
  }
  public static <T extends AbstractInputData> T copyCustomData(T t) {
    ...
  }
}

ProcessorA只能返回AbstractInputData类型的对象,而processorB根据参数类型返回Email或Mobile。