构建一种返回由输入决定的原始数据类型的Java方法



我希望一种读取字符串的方法,并在隐含(最佳拟合)数据类型中返回其值。我想避免将字符串转换为"主"中的数据类型转换,因为代码可能会产生混乱。这可能吗?我可以创建返回不同类型的方法吗?构造函数是什么样的?

不可能返回不同的原始类型。您可以做的是将该方法声明为返回Object,在运行时返回盒装原始词:IntegerDoubleBoolean等实例等。

您可以探索枚举类型,以作为对最终类型进行分类的一种方式。您不会说要使用它的目的,所以这可能不是最好的,但是可以以处理您提供的要求的方式来完成。

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.
  }
}

其他类可以使用分类型(希望有一个更好的名称)来确定从中获得什么样的价值。

无论如何,它击败了返回对象,然后必须在整个地方使用instanceof来弄清楚您要处理的内容,如果您需要的话,这将扩展到非主要内容。

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

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

public class Demo(){
    Demo(String str){
        // Do something...
    }
    Demo(int newInt){
        // Do something...
     }
    // Other constructors for other types here    
}

最新更新