我希望一种读取字符串的方法,并在隐含(最佳拟合)数据类型中返回其值。我想避免将字符串转换为"主"中的数据类型转换,因为代码可能会产生混乱。这可能吗?我可以创建返回不同类型的方法吗?构造函数是什么样的?
不可能返回不同的原始类型。您可以做的是将该方法声明为返回Object
,在运行时返回盒装原始词:Integer
,Double
,Boolean
等实例等。
您可以探索枚举类型,以作为对最终类型进行分类的一种方式。您不会说要使用它的目的,所以这可能不是最好的,但是可以以处理您提供的要求的方式来完成。
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
}