0

在这种方法中,我将字符串作为输入,根据字符串名称,有时我需要返回值,有时是它的字符串,有时是 int,double,int64,bool 等由于它的动态类型,我不知道如何在方法返回类型中定义它和如何向其添加值以及如何调用返回类型为动态的此方法,知道吗?

public static ? SwitchInput(String TypeName) {

       if (TypeName == "java.lang.String" ) {
            Return = "A";
        }
        else if (TypeName == "int" ) {
            Return =  1;
        }
        else if (TypeName == "double") {
            Return = 1.00
        }

等用于 bool 和所有其他类型

    }
4

3 回答 3

2

Object将是你最好的选择,除非返回的类型共享一个祖先

例子 :

public static Object switchInput(String typeName) {       

   if ("java.lang.String".equals(typeName)) {
        return "A";
    }
    else if ("int".equals(typeName)) {
        return 1i;
    }
    else if ("double".equals(typeName)) {
        return 1.0d
    }
 }

泛型的另一个例子

 static <T> T switchInput(String typeName){
   if ("java.lang.String".equals(typeName)) {
    return "A";
    }
    else if ("int".equals(typeName)) {
        return 1i;
    }
    else if ("double".equals(typeName)) {
        return 1.0d
    }

 }

 String str = MyClass.switchInput("java.lang.String")

我没有测试过,这是我第一次想到泛型的一个更简单的版本

于 2013-01-22T11:22:44.083 回答
1

作为对您的问题的一个丑陋的解决方案,您可以将您的方法设置为运行类型 Object。(因为 Boolean、Integer、Double 都是子类型)

您必须确保随后在使用返回值(使用 instanceof)时推断出正确的类型并将其重新转换为正确的类型。

我可以问你为什么需要这种方法吗?这稍微滥用了方法定义的概念。

  public static Object SwitchInput(String TypeName) {

   if (TypeName.equals("java.lang.String") ) {
        Return = new String("A");
    }
    else if (TypeName.equals("int") ) {
        Return =  new Integer(1);
    }
    else if (TypeName.equals("double")) {
        Return = new Double(1.00) ;
    }
 etc for bool and all the other types

}

并使用此代码片段来推断它在您的代码中进一步向下的类型

  if(returned_value instanceof Double)

等等

于 2013-01-22T11:22:11.470 回答
1

要知道返回类型是什么,您必须找到一个适合所有这些类型的容器。显然,这是 Object。您必须将原始类型转换为相应的对象(例如将 int 转换为 Integer)。

更好的方法是创建一个新的容器类,它包含一个泛型类型<T>。像

public class SwitchDemo {

public static SwitchInputType<?> switchInput(String typeName) {
    if (typeName.equals("java.lang.String")) {
        return new SwitchInputType<String>(new String("A"));
    } else if (typeName.equals("int")) {
        return new SwitchInputType<Integer>(new Integer(312));
    }
    return null;
}

public static class SwitchInputType<T> {
    private T type;

    public SwitchInputType(T type) {
        super();
        this.type = type;
    }

    public T getType() {
        return type;
    }

    public void setType(T type) {
        this.type = type;
    }
}

public static void main(String[] args) {
    SwitchInputType<?> sit1 = SwitchDemo.switchInput("java.lang.String");
    System.out.println(sit1.getType());
    SwitchInputType<?> sit2 = SwitchDemo.switchInput("int");
    System.out.println(sit2.getType());
}

}

于 2013-01-22T11:26:10.730 回答