我想在我的构造函数中设置我的对象状态。我称之为setState
方法。
这一直给我null
。我读到你不能调用可以在构造函数中重写的方法,所以我想这就是原因。我将setState
方法设为最终并仍然看到问题。
可以在构造函数中执行myState = x;
而不是调用setState(x)
吗?
还有任何想法为什么即使方法是最终的,在构造函数中调用setState
也不起作用?
还有一点是,完成所有这一切的类是抽象的,不确定这是否有所不同。
语言是Java。
我不确定发布代码,我公司对此很敏感。不想和我的雇主发生麻烦。
我会发布一些通用代码
public abstract class Abc
public Abc()
{
setState(uninit);
}
public final void setState(state s)
{
myState = s;
}
如果我更改了行
,这不起作用setState(uninit);
到
myState = uninit;
它有效,但我不确定这是个好主意,因为我有一个州的设定者。
答案 0 :(得分:0)
我想你忘了在子类构造函数中调用超级构造函数。
super();
类似
public class sub_abc extends abc}
public sub_abc(){
super();
...
}
}
答案 1 :(得分:0)
不确定您的实际代码是什么,但我在setState()
方法的形式参数列表中找不到参数名称。
public abstract class abc
{
public abc()
{
setState(uninit);
}
public final void setState(state s) //Seems to be something like this.
{
myState = s;
}
}
此外,您必须遵循Java命名约定。因此,您的班级名称abc
应替换为Abc
,依此类推。
答案 2 :(得分:0)
我通常在构造函数中初始化我的类变量。 getter和setter通常只供其他类使用,所以我认为没有理由不能只使用myState = uninit;
public abstract class abc {
private State uninit;
public abc()
{
myState = uninit;
}
public final void setState(State newState)
{
myState = newState;
}
}
答案 3 :(得分:0)
在构造函数中执行myState = x;
与调用setState(uninit);
具有完全相同的效果;至少就我能想象你的原始代码而言。在那种情况下,错误必须在其他地方。也许你再次打电话给setState
?或者两个测试之间的其他不同之处。我会在构造函数中放置一个断点并逐步执行代码。
此处没有任何内容可以让您的公司反对敏感。如果它让您更舒服,请使用an online compiler such as ideone