我正在使用.jar java库进行图像分析。我想访问对象中的某些数据,但没有提供公共get / set方法;使用fieldnames(object, '-full')
方法返回一个空单元格数组,因此我假设所有字段都是私有的。
然而,当我在Matlab变量查看器中查看对象时,我想要的数据字段是可见的(我假设变量查看器显示了所有对象字段和属性,尽管我也不确定)。
有没有办法在Matlab中以编程方式访问这些字段?我看过一些关于使用反射的帖子,但我不清楚它是如何在Matlab中起作用的?
由于
答案 0 :(得分:2)
以下是使用Java反射访问类中的私有字段的示例(借用this post)
使用以下Java类(不要忘记使用javaaddpath
使其可供MATLAB访问):
class Test
{
private String str;
public Test() {}
public void setStr(String value) { str = value; }
}
首先让实例化类:
>> t = Test()
t =
Test@62748e
>> t.setStr('foo')
>> t.str
No appropriate method, property, or field str for class Test.
显然,尝试访问私有字段会引发错误。以下是我们如何使用反射:
>> f = t.getClass().getDeclaredField('str')
f =
private java.lang.String Test.str
>> f.setAccessible(true)
>> f.get(t)
ans =
foo