避免警告"非依赖财产的固定方法不应该访问......"

时间:2017-03-01 08:47:51

标签: matlab oop warnings

我有一个类,它有一些属性,2个相关,在一个名为param1, param2的例子中。他们是独立的,只是受到限制。 param2必须与param1一样大或大,param1必须始终存在。有问题的代码如下:

    function set.param1(obj, input)
        disp('setting param1')
        obj.param1 = input;
        if (isempty(obj.param2) || obj.param2 < obj.param1) % Warning on param2
           obj.param2 = obj.param1; % Warning on param2
        end
    end

set.param2的类似代码。 代码工作正常,我看不到更好的方法来做到这一点。问题 - 它产生警告&#34;一套方法......&#34;像标题中提到的那样。我因为缺乏更好的解决方案而压制他们。 有没有更好的方法来实现这个功能,没有警告?显然不是一个hacky&#34;解决方案&#34;像隐藏的函数SetParam2

function SetParam2(obj, input)
   obj.param2 = input;
end

让编辑器感到困惑,它不会抱怨。

1 个答案:

答案 0 :(得分:4)

您可以使用两层属性

  • 暴露的一层和grep -w -F -m1 "$searchString" $regFile
  • 一个私有的图层,实际存储值

文档中使用了类似的技术:Avoid Property Initialization Order Dependency

String getDetails() {
    StringBuilder sb = new StringBuilder();
    try {
        URL url = new URL(baseUrl);
        URLConnection urlConnection = authenticate_api(url);
        urlConnection.setRequestProperty("Accept", "application/xml");
        BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));

        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line);
        }
        reader.close();

        return sb.toString();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

private URLConnection authenticate_api(URL url) throws IOException {
    URLConnection urlConnection = url.openConnection();
    String authString = username + ":" + password;
    String authStringEnc = new String(Base64.encodeBase64(authString.getBytes()));
    urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc);
    return urlConnection;
}

这里的技巧:Dependentclassdef TestClass < handle properties (Access = private) privateParam1; privateParam2; end properties (Dependent) param1; param2; end methods function p1 = get.param1(obj) p1 = obj.privateParam1; end function p2 = get.param2(obj) p2 = obj.privateParam2; end function set.param1(obj, input) obj.privateParam1 = input; if (isempty(obj.privateParam2) || obj.privateParam2 < obj.privateParam1) obj.privateParam2 = obj.param1; end end function set.param2(obj, input) if (~isempty(obj.privateParam1) && obj.privateParam1 > input) obj.privateParam2 = obj.privateParam1; else obj.privateParam2 = input; end end end end 存储这两个值。 get和set仅针对公开的属性privateParam1privateParam2实现:param1只返回内部属性,而param2中的两者都可以在没有分析器的情况下使用警告,因为它们被标记为get