我想写一个条件语句,取决于变量是int还是double,即
if (x is a double)
do stuff
else if(x is an int)
do stuff
else
do stuff
我知道这可能不是一个好主意,但它是我现在唯一的选择。这可能吗?
答案 0 :(得分:4)
我不知道在编译时你不知道x是一个int还是一个double,但是
void dostuff(int x) {
do stuff...
}
void dostuff(double x) {
do stuff...
}
然后
dostuff(x)
将调用适当的方法。
答案 1 :(得分:1)
编辑添加: 根据您对原始问题的评论,我认为这个问题不是您想要的。我将对另一个问题发表评论,试图为yoru真正的问题提供一些帮助。
正如蜥蜴比尔所说,你会在编译时知道原语是什么类型的:
public void foo(int x, double y){...}
另一方面,如果你将你的类型放在另一个对象中,比如
Vector v = new Vector(); v.add((int)1); v.add((double)1.0));
然后你真的处理的是对象而不是原始对象。每个原语都有一个对应的类:
您可以使用instanceof关键字来确定您正在处理的类型(您可以对任何类执行此操作):
if( x instanceof Double ) { doDoubleThing(); } else if( x instanceof Integer ) { doIntegerThing(); } // and so on
答案 2 :(得分:1)
我猜你在试图检查数字是否有小数部分。
double n; if(n-floor(n)>0) it has a decimal part else it's an integer
答案 3 :(得分:0)
如果您有能力使用两种方法,atk写的内容是有效的。如果这不是一个选项或你不想这样做(个人认为它可能更可读,更少重复有一个方法,只是做一个if-else分支,取决于你的代码),你可以使用反射:
Class intClass = Integer.class;
Class doubleClass = Double.class;
if intClass.isInstance(foo)
bar();
else if doubleClass.isInstance(foo)
spam();
else
eggs();
这可能不一定是最好的解决方案。只是觉得你应该知道它。