3

我正在研究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) {
....
}
}

B.

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

A和B有区别吗?

4

2 回答 2

5

唯一的区别是第二种方法通过反射显示为泛型类型方法。除了像这样的奇怪情况外,它的行为将是相同的

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

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

于 2013-09-05T09:12:30.183 回答
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。

于 2013-09-05T09:31:48.787 回答