我使用arraylist来存储以下类的实例
public class Variable extends Expression {
String name;
double value;
boolean initialized=false;
public Variable(String name){
this.name=name;
}
public void setValue(double value){
this.value=value;
initialized=true;
}
public boolean isInitialized(){
return initialized;
}
public String getName(){
return name;
}
@Override
public double getValue() {
return this.value;
}
}
并且我已经定义了如下所示的arraylist:
static ArrayList<Variable> variables = new ArrayList<Variable>();
问题是当我尝试使用Arraylist类的get(index)方法设置Variable实例的value字段时,第一个类的setValue方法无法正常工作:
variables.get(i).setValue(X);
无论X的值是什么(X是双精度),它总是将值字段设置为0。
问题是什么以及如何解决?感谢。
答案 0 :(得分:1)
这只是猜测,但我认为您可能正在使用Double
而不是double
。根据{{3}},Expression有一个名为setValue的方法,它接受一个Object(如Double
)。您已经声明了一个名为setValue的方法,该方法采用原始double
,因此如果您正在使用Double
正在调用Expression方法,而不是您创建的方法。< / p>
这是我在想法中输入的内容,以表明我的意思:
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
static double p = 12.5;
static Double o = new Double(12.5);
public static void main (String[] args) throws java.lang.Exception
{
runWithPrimitive(p);
runWithObject(o);
}
public static void runWithPrimitive(double x) {
System.out.println("primitive");
}
public static void runWithObject(Object x) {
System.out.println("object");
}
}
输出结果为:
primitive
object
在此处试试:Java's documentation