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

构造一个返回由输入决定的原始数据类型的Java方法?,java,Java,我想要一个方法来读取字符串,并以隐含(最佳拟合)数据类型返回它的值。我希望避免在“main”中进行字符串到数据类型的转换,因为代码可能会造成混乱。这可能吗?我可以创建一个返回不同类型的方法吗?构造函数是什么样子的?不可能返回不同的基元类型。您可以做的是将该方法声明为返回对象,并在运行时返回装箱原语:Integer、Double、Boolean,等等。单个Java方法不能返回多个类型。这是因为Java是一种强类型语言 有几种不同的方法可以实现这一点。如果您希望按照OP中提到的构造函数路线,它将如下

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

不可能返回不同的基元类型。您可以做的是将该方法声明为返回
对象
,并在运行时返回装箱原语:Integer、
Double
Boolean
,等等。

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

有几种不同的方法可以实现这一点。如果您希望按照OP中提到的构造函数路线,它将如下所示:

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

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

    // Other constructors for other types here    
}

您可以使用枚举类型对最终得到的类型进行分类。你没有说你想用它做什么,所以这可能不是最好的,但它可以用一种处理你给出的需求的方式来完成

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(希望有更好的名称)来确定从中获得什么样的值,只要它们需要


无论如何,它比返回对象,然后到处使用
instanceof
来找出您正在处理的内容要好得多,如果您需要,这将扩展到非原语。

您需要如何处理此值?如果您最终进行了类型检查,那么即使复杂的转换本身已被隐藏,您也会回到混乱状态。这是一个非常糟糕的想法,因为唯一可能的返回类型是
Object
,因此调用者有责任确定返回数据的类型。如果没有更多的上下文,这个问题真的是无法回答的,特别是一些您想如何使用它的示例,以及您已经考虑过返回
对象的含义的证据。这将是我的方法。方便的方法,如
isString()
isInt()
,和
getAsString()
getAsInt()
等,可以减少/隐藏丑陋的类型转换。是的,我同意有更干净的方法可以做到这一点,但OP似乎希望避免手动检查代码中的数据类型。为了使用正确的助手方法,您需要进行一些手动转换。对于OP,我想指出,如果使用如上所示的构造函数方法,类型转换仍在幕后进行。如果你关心的是优化,这可能很重要。虽然这肯定是正确的,但我觉得它并没有完全回答op的全部问题。除非op提出后续问题,否则我没有任何其他补充。