Доступ к константе подкласса в статическом родительском методе - PullRequest
1 голос
/ 07 января 2012

Возможно ли получить доступ к константе дочернего класса из статического метода в родительском классе?

public class Model  {

    public static void someMethod(){
        HERE I WANT TO GET THE MODEL_NAME constant!
    }
}

public class EventModel extends Model {
    public static final String MODEL_NAME = "events";
}

и в каком-то другом месте я звоню:

EventModel.someMethod();

Ответы [ 2 ]

3 голосов
/ 07 января 2012

Попробуйте!

Если константа объявлена ​​private, то нет.Если это public, то да, так как любой может получить к нему доступ.Родительский класс здесь в основном не имеет отношения.

class Parent {
    public static void Foo() {
        int x = Child.YEP;    // Ok
        int y = Child.NOPE;   // Error
    }
}

class Child extends Parent {
    public  static final int YEP  = 42;
    private static final int NOPE = 66;
}

Foo определен в Parent и поэтому не может получить доступ к закрытым членам Child.

Как насчет этого?

class Parent {
    abstract String getModelName();

    public void someMethod() {
        String myModel = getModelName();
    }
}

class Child extend Parent {
    String getModelName() { return "events"; }
}

Обратите внимание, что метод больше не является общедоступным.

1 голос
/ 07 января 2012

Возможно, вы найдете это более эффективным.

Определите ваш родительский класс с помощью метода getName. Обратите внимание, что это может быть общедоступным, если вы хотите, чтобы ваш класс модели представлял свойство Name, в противном случае вы можете сохранить его как «защищенный», как я здесь. «Защищенный» будет держать метод видимым внутри этого класса и любых производных (дочерних) классов.

public class Model {
    private static String MODEL_NAME = "Model";

    protected String getModelName(){
        return MODEL_NAME;
    }       
}

Затем определите «переопределение» для метода name вашего дочернего класса:

public class EventModel extends Model
{
    private static String MODEL_NAME = "events";

    @Override // Tells the compiler that this method OVERRIDES the parent method
    public String getModelName(){
        return MODEL_NAME;
    }
}

Это компилирует и работает так, как я подозреваю, вы пытаетесь достичь. , .

РЕДАКТИРОВАТЬ: Ооо. СЕЙЧАС я вижу проблему. Пропустил, что вам нужно сослаться на это из статического метода. , ,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...