Доступ к унаследованной переменной из класса anon в Java - PullRequest
0 голосов
/ 18 января 2012

Как следует из названия, я пытаюсь сделать что-то вроде этого:

public abstract class ClassA{

    private String var;

    ...


    protected void setVar(String var){
        this.var = var
    };

    protected String getVar(){
        return this.var
    };  
}

public class ClassB extends ClassA{

    public ClassB(...){

        object.setListener(new Listener(){
            @Override
            public void onItemSelected(data ...){
                // Would like to do:
                var = data;
                // BUT:
                // CANT CALL VAR since its a private String of Class A
                // CANT CALL setVar(data) since it will end up looping
                // CANT CALL super.setVar(data) since super dosn't point to ClassA in here
            };
        });
    }

    @Override
    protected void setVar(String var){
        super.setVar(var);

        // DO MORE STUFF WHICH WILL CALL THE LISTENER
    };
}

Конечно, я мог бы сделать var публичным, но это не то, что я хочу!var должен оставаться защищенным, изменения должны происходить только с помощью установщиков.

Есть ли способ?

Ответы [ 2 ]

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

Попробуйте это:

object.setListener(new Listener(){
public void onItemSelected(data ...){
    ClassB.this.var = data;
}});
0 голосов
/ 19 января 2012

Немного запутанный, но:

class Listener {
    public void onItemSelected(String data){ }
}

class ClassC {
    public void setListener(Listener listen) {
        listen.onItemSelected("Do something");
    }
}

abstract class ClassB{

    protected String var;

    protected void setVar(String var){
        this.var = var;
    };

    protected String getVar(){
        return this.var;
    };  

    public void printVar() {
        System.out.println("This is 'var': " + this.var);
    }
}

public class ClassA extends ClassB{

    public static void main(String[] argv) {
        ClassA me = new ClassA("Do something else");
    }

    public ClassA(String x){

        ClassC object = new ClassC();
        object.setListener(new Listener(){
            @Override
            public void onItemSelected(String data){
                // Would like to do:
                var = data;
                // BUT:
                // CANT CALL VAR since its a protected String of Class A
                // CANT CALL setVar(data) since it will end up looping
                // CANT CALL super.setVar(data) since super dosn't point to ClassA in here
            };
        });
        this.printVar();
   }

    @Override
    protected void setVar(String var){
        super.setVar(var);

        // DO MORE STUFF WHICH WILL CALL THE LISTENER
    };
}

Результаты:

C:\JavaTools>javac ClassA.java

C:\JavaTools>java ClassA
This is 'var': Do something

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