如何让一个方法具有不同的输入类型java

时间:2011-08-28 22:25:54

标签: java

我的计算机上有一个模拟互联网服务器的程序,虚假服务器需要能够向某些类发送多种数据类型。例如,在程序的某一点,服务器需要将int发送到类,然后将该int转换为字符串并将其发送给另一个字符串。

基本上我要问的是一个方法是否可以为输入提供多种数据类型(这是否有意义?如果没有生病,请尝试更好地解释)。如果没有创建许多不同的方法,有没有办法做到这一点?

编辑:还有一种方法可以区分传入的类型(防止错误)

5 个答案:

答案 0 :(得分:3)

您可以使用任何类型的Object方法。在Java 5.0及更高版本中,原语将被自动装箱并作为对象传递。

void method(Object o);
可以使用

调用

method(1);
method("hello world");
method(new MyClass());
method(null);

答案 1 :(得分:2)

如果我理解正确,你会问一个方法foo()是否可以为其参数提供多个不同的输入

这种方式foo(Integer i)foo(String s)包含在同一方法中。

答案:是的,但不是很好

foo(Object o)

是您的方法声明

现在你需要理清不同类型的可能性

if(o instanceof Integer){
    stuff();
} else if (o instanceof String){
    moreStuff();
}

只需将其他/ if语句链接到所需结果。

答案 2 :(得分:0)

您想要的是通用方法或类。 要检查对象的类型,您必须使用'instanceof'方法

你可以使整个类成为通用的,也可以只是一个方法,一个泛型类的例子:

package javahowto;
public class Member<T> {
 private T id;
 public Member(T id) {
   this.id = id;
 }
 public T getId() {
   return id;
 }
 public void setId(T id) {
   this.id = id;
 }
 public static void main(String[] args) {
   Member<String> mString = new Member<String>("id1");
   mString.setId("id2");
   System.out.printf("id after setting id: %s%n", mString.getId());
   //output:  id after setting id: id2

   Member<Integer> mInteger = new Member<Integer>(1);
   mInteger.setId(2);
   System.out.printf("id after setting id: %d%n", mInteger.getId());
   //output:  id after setting id: 2
 }

现在你要找什么我相信你会找到解决问题的最佳方案。

退房: http://download.oracle.com/javase/tutorial/java/generics/index.html http://en.wikipedia.org/wiki/Generics_in_Java

...

答案 3 :(得分:0)

我也想知道并在下面写下了块。我认为instanceof更好,但我尝试了getclass。

public static void main(String [] args){

    System.out.println(method("This is a test"));
}


private static String method(Object o){
            System.out.println(o.toString());
    String status = "";
    String className;
    String[] oList = {"Double","Integer","String","Double","Float","Byte","Short","Long","Character","Boolean" };

    for(int i = 0;i<oList.length;i++){

        className = "java.lang." + oList[i];
        Class testClass;
        try {
            testClass = Class.forName(className);
            if(o.getClass().equals(testClass)){

                status =  "Your object is " + oList[i];


            }
        } catch (ClassNotFoundException e) {

            e.printStackTrace();
        }

    }


    return status;

} 

答案 4 :(得分:0)

您可以使用“散列适配器”模式。

Public interface Adapter {
  Public void handle(object o);
}

Public class StringAdapter implements Adapter {
  Public void handle(String st) { // stuff ...
}

Public class IntegerAdapter implements Adapter {
  Public void handle(Integer intgr) { // stuff ...
}

Private static final Map adapters = new HashMap();
Adapters.put(string.class, new stringAdapter());
Adapters.put(Integer.class, new IntegerAdapter());

Public void handleMe(Object o) {
  Adapters.get(o.getClass()).handle(o);
}

我总是喜欢这个,而不是'ifs和其他人的'级联。

在我的iPad上,对于格式化,简洁和拼写感到遗憾。