我正在学习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之间有什么区别吗?
答案 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。