Java在int或String之间返回(未知的返回类型)

时间:2014-02-19 10:51:54

标签: java string object int return

我的程序从文本文件加载信息,并创建一个对象数组,其中包含信息,无论是整数还是字符串。

然后我想让对象返回String或Integer,具体取决于对象是持有整数值还是字符串值。

...编辑 所以这里是我的类型类,如果文本文件中的字段是数字,则持有int;如果字段是单词,则持有字符串,并且它保存在Type数组中。

public class Type {

  private String name;
  private int value;

  public Type(String name) {
      this.name = name;
  }

  public Type(int value) {
      this.value = value;
  }

  public String getName() {
      return this.name;
  }

  public int getValue() {
      return this.value;
  }

  public boolean isInt() {
      boolean isInt = false;
      if (this.value != 0) {
        isInt = true;
        return isInt;
      }
      return isInt;
  }

}

所以在我的数组中可以是Int或String,我想在我的主类中返回没有任何长语句的数据类型。

5 个答案:

答案 0 :(得分:2)

如果您只想获取特定值,可以在Type类中添加一个方法并从此方法中获取值,这很丑陋但是可以做到你想要的:

public <T> T getDynamicValue(Type t) {
     if (isInt()) {
          return (T) ((Integer) t.getValue());
     } else {
          return (T) t.getName();
     }
}

使用它:

List<Type> dynamicList = Arrays.asList(new Type[]{new Type(1), new Type(2), new Type("dog")});
for (Type t : dynamicList) {
    System.out.println("T -> " + t.getDynamicValue(t));
}

如果你想对这些数据进行一些操作,你必须进行instanceof检查并进行转换,例如使用名称值的一些拆分(或String方法)...

答案 1 :(得分:1)

您无法选择要在运行时返回的对象类型。您唯一的选择是返回Object。您可以使用此代码检查它是String还是int,例如:

if(object instanceof String) {
   //... it's a string
}
else {
   //...otherwise it's an int
}

答案 2 :(得分:1)

如果要读取String实例的所有输入,则需要根据Integer.parseString(value)测试值,以确定它是否实际上是整数。

答案 3 :(得分:1)

您可以尝试将对象转换为Integer并抓住ClassCastException

try {
    int i = (Integer) object;
}
catch (ClassCastException e){
    String s = (String) object;
}

答案 4 :(得分:1)

当我遇到这类问题时,我有时会通过解决问题和使用回调式解决方案来解决问题。

例如:

for ( Type t : array ) {
  t.process( callback );
}

回调如下所示:

interface Callback {
  public void processInt(....);
  public void processString(....);
}

然后,您可以使用if (isInt()) callback.processInt() else callback.processString()实现流程方法,或者如果更改Type的定义,则可以使用继承树为您执行此操作。

例如:

interface Type {
  public void process( Callback cb );
}

class IntType implements Type {
  public void process( Callback cb ) {
    cb.processInt(...);
  }
}

class StringType implements Type {
  public void process( Callback cb ) {
    cb.processString(...);
  }
}