在这个方法中我得到字符串作为输入,并根据字符串名称我需要返回值有时它的字符串有时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和所有其他类型的等
}
答案 0 :(得分:2)
Object
将是您最好的选择,除非返回的类型与Ancestor共享
示例:
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")
我没有测试过,这是我对泛型的第一个想法的简单版本
答案 1 :(得分:1)
作为您问题的丑陋解决方案,您可以将方法设置为运行Object类型。 (如布尔值,整数,双精度都是子类型)
您必须确保在使用返回值(使用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)
等。
答案 2 :(得分:1)
要知道返回类型是什么,你必须找到一个容纳所有这些类型的容器。显然,这是Object。您必须将基元类型转换为相应的对象(如int到Integer)。
更好的方法是创建一个新的容器类,它包含泛型类型&lt; T&gt;。像
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());
}
}