我想要一种方法来读取字符串,并在隐含(最佳拟合)数据类型中返回它的值。我想避免在" main"中进行字符串到数据类型转换,因为代码可能会造成混乱。这可能吗?我可以创建一个返回不同类型的方法吗?构造函数是什么样的?
答案 0 :(得分:3)
无法返回不同的原始类型。你可以做的是将方法声明为返回Object
,并在运行时返回盒装基元:Integer
,Double
,Boolean
等的实例。
答案 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
来弄清楚你正在处理什么,如果你需要的话,这会延伸到非原语。