构造一个返回由输入决定的原始数据类型的Java方法?

时间:2016-11-27 00:49:13

标签: java

我想要一种方法来读取字符串,并在隐含(最佳拟合)数据类型中返回它的值。我想避免在" main"中进行字符串到数据类型转换,因为代码可能会造成混乱。这可能吗?我可以创建一个返回不同类型的方法吗?构造函数是什么样的?

3 个答案:

答案 0 :(得分:3)

无法返回不同的原始类型。你可以做的是将方法声明为返回Object,并在运行时返回盒装基元:IntegerDoubleBoolean等的实例。

答案 1 :(得分:1)

单个Java方法不能返回多种类型。这是因为Java是一种强类型语言。

有几种不同的方法可以实现这一目标。如果您想按照OP中提到的构造函数路径,它看起来像这样:

public class Demo(){
    Demo(String str){
        // Do something...
    }

    Demo(int newInt){
        // Do something...
     }

    // Other constructors for other types here    
}

答案 2 :(得分:1)

您可以探索枚举类型,作为对最终类型进行分类的方法。你不会说出你想要用它的东西,所以这可能不是最好的,但它可以用一种方式来处理你给你的要求。

public class ClassifiedType
{
  public enum ClassifiedTypeType { INTEGER,  FLOAT,  STRING,  BOOLEAN };

  ClassifiedTypeType  typeType = null;
  int                 integerValue;
  float               floatValue;
  String              stringValue;
  boolean             booleanValue;

  public ClassifiedType(int i) { integerValue = i; typeType = ClassifiedTypeType.INTEGER; }
  public ClassifiedType(float f) { floatValue = f; typeType = ClassifiedTypeType.FLOAT; }
  // etc.

  public int getIntegerValue()
  {
    if (typeType != ClassifiedTypeType.INTEGER) 
    { 
      throw new IllegalArgumentException("Attempting getInteger on type of " + this.toString());
    }
    else
    {
      return integerValue;
    }
  }

  // do gets for other types similarly.

  public static ClassifiedType getClassifiedType(String string)
  {
    // parse the string, determine which type you want, 
    // instantiate a ClassifiedType with its value and 
    // and type, and return it.
  }
}

其他类可以使用ClassifiedTypeType(希望有更好的名称)来确定从中获取的值的类型,直到他们需要它为止。

无论如何,它击败了返回Object,然后不得不在整个地方使用instanceof来弄清楚你正在处理什么,如果你需要的话,这会延伸到非原语。