如何访问对象的公共方法,该方法是另一个对象的私有属性?

时间:2018-08-01 16:54:19

标签: java android nest-api

我正在通过Android应用程序使用Nest Camera API,但遇到了我最初认为与隐私有关的问题,但我不正确。 具体来说,我在这里的API中的Camera类存在问题:https://github.com/nestlabs/android-sdk/blob/master/sdk/src/main/java/com/nestlabs/sdk/models/Camera.java

我的问题出现在以下代码片段中:

   private void startWithListeners(NestToken token) {

    // Listen for and handle updates from camera(s) and structure. 
    wwnClient.addListener(new NestListener.GlobalListener() {
        @Override
        public void onUpdate(@NonNull GlobalUpdate update) {
            mCamera = update.getCameras().get(0);

            Log.d(TAG, mCamera.getLastEvent() + " \n\n");

            if (mCamera.getLastEvent().getHasPerson()) {
                Log.d(TAG, "Camera has person ");
            }
            else { Log.d(TAG, "Camera does not have person");
            }

            mStructure = update.getStructures().get(0);
            updateViews();
        }
    });
}

我能够成功访问mCamera中的LastEvent对象而不会出错,并且可以打印它以查看我要访问的所有属性(包括has_person),但是调用LastEvent类的getHasPerson()方法会导致以下错误:

error: getHasPerson() in LastEvent is defined in an inaccessible class or interface

LastEvent的getHasPerson方法是公共的,但LastEvent在Camera对象中是私有的,因此我怀疑这是问题所在,并制作了以下简化示例进行复制:

TestCamera.java:

import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonProperty;

public class TestCamera {

    @JsonProperty("last_event")
    private TestLastEvent mA = new TestLastEvent();

    public TestCamera() {
    }

    @JsonGetter("last_event")
    public TestLastEvent getTestLastEvent() {
        return this.mA;
    }
}

TestLastEvent.java:

import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonProperty;

public class TestLastEvent {

    @JsonProperty("has_person")
    private Boolean has_person = true;

    public TestLastEvent() {
    }

    @JsonGetter("has_person")
    public Boolean getHasPerson() {
        return this.has_person;
    }
}

Test.java:

public class Test {
    public TestCamera mCamera = new TestCamera();

    public Test() {
        mCamera.getTestLastEvent();
        mCamera.getTestLastEvent().getHasPerson();

    }
}

没有抛出任何错误,所以我的猜想是错误的。

因此,我怀疑Camera类及其对LastEvent类的使用缺少一些东西,但我无法弄清楚。

0 个答案:

没有答案