Java,阻止类调用公共方法

时间:2016-10-17 21:29:39

标签: java exception public

对于作业,我必须为“州”类编写代码,该类具有关于飞机位置的所有属性。

Javadoc已经写好了,必须严格遵守。所有set方法都是公共的,但是如果除了Airplane之外的任何类都尝试使用它们,则必须抛出异常。

我无法改变任何一个类的结构或可见性。我的教授说要以某种方式使用“克隆”或布尔值。我该怎么做呢?

public void setSpeed(double speed)
{
    if(method called by any class other than Airplane.java)
    {
        //throw exception
    }
    else
    {
        //continue setting speed
    }
}

2 个答案:

答案 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...
}