如何使用不同的参数类型实现一个方法?

时间:2014-07-28 15:36:47

标签: java oop

我应该实现一个四方法来处理不同类型的一个特定目标。我找不到如何实现它的逻辑方法。在下面的代码中,我应该创建一个抽象和扩展关系,还是只将它们放在一个类中并使用方法覆盖?

我想要管理的只是call(argument)。在内部,应该调用以下方法:

如果参数的类型为String

,则调用foo(String argument) 如果参数类型为Map

,则

调用foo(Map argument)

如果参数的类型为整数数组

,则调用foo(Integer[] argument)

2 个答案:

答案 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}}。