对于作业,我必须为“州”类编写代码,该类具有关于飞机位置的所有属性。
Javadoc已经写好了,必须严格遵守。所有set方法都是公共的,但是如果除了Airplane之外的任何类都尝试使用它们,则必须抛出异常。
我无法改变任何一个类的结构或可见性。我的教授说要以某种方式使用“克隆”或布尔值。我该怎么做呢?
public void setSpeed(double speed)
{
if(method called by any class other than Airplane.java)
{
//throw exception
}
else
{
//continue setting speed
}
}
答案 0 :(得分:2)
我同意这个要求是无稽之谈,但这可以做到:
public void setSpeed(double speed)
{
if(!Airplane.class.equals(Thread.getCurrentThread().getStacktrace()[1].getClass()))
{
//throw exception
答案 1 :(得分:0)
由于这些是非静态方法,我们可以使用getClass()
来检查调用该方法的人并将其与Airplane.class
进行比较。 getStackTrace()技术很棒,但这里不需要。另外,我们应该使用!=
而不是equals(Object)
,因为我们要检查实际的类,而不允许Airplane.equals(Object)
的实现不检查子类的情况。
public void something() {
if (Airplane.class != getClass()) {
throw new IllegalArgumentException("Cannot call from " + getClass());
}
// and so on...
}