我有一个类,它有一些属性,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
让编辑器感到困惑,它不会抱怨。
答案 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;
}
这里的技巧:Dependent
和classdef 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仅针对公开的属性privateParam1
和privateParam2
实现:param1
只返回内部属性,而param2
中的两者都可以在没有分析器的情况下使用警告,因为它们被标记为get
。