我应该实现一个四方法来处理不同类型的一个特定目标。我找不到如何实现它的逻辑方法。在下面的代码中,我应该创建一个抽象和扩展关系,还是只将它们放在一个类中并使用方法覆盖?
我想要管理的只是call(argument)
。在内部,应该调用以下方法:
如果参数的类型为String
,则调用foo(String argument)
如果参数类型为Map ,则调用foo(Map argument)
如果参数的类型为整数数组
,则调用foo(Integer[] argument)
答案 0 :(得分:3)
这是一个简单的重载案例。只需填写方法体,
void foo(String argument){
}
void foo(Map argument){
}
void foo(Integer[] argument){
}
和
之类的电话obj.foo( something );
将起作用,取决于作为三个参数类之一的东西。
(当然,这也适用于静态方法。)
答案 1 :(得分:2)
如果有一种机制来检查参数的类型,比如type(argument)== String,我将使用泛型方法。
如果我理解你,那么是 - 有instanceof
。
public static <T> void myMethod(T obj) { // <-- generic type T
if (obj instanceof String) {
System.out.println("Printing String directly: " + (String) obj);
} else {
System.out.println("Printin String by toString(): " + obj.toString());
}
}
public static void main(String[] args) {
myMethod("Hello");
myMethod(new Date());
}
根据Java Tutorial链接,
instanceof
运算符将对象与指定类型进行比较。您可以使用它来测试对象是否是类的实例,子类的实例或实现特定接口的类的实例。
这里你真的不需要泛型,所以你可以像
那样实现myMethod()
public static void myMethod(Object obj) { // Any Object
if (obj instanceof String) {
System.out.println("Printing String directly: " + (String) obj);
} else {
System.out.println("Printin String by toString(): " + obj.toString());
}
}
最后,所有这些都会分散手头的问题 - 您应该只使用function overloading中的this answer {/ 3}}。