【问题标题】:Accessing Java object fields in Matlab在 Matlab 中访问 Java 对象字段
【发布时间】:2013-06-28 13:48:04
【问题描述】:

我正在使用 .jar java 库进行图像分析。我想访问对象中的某些数据,但没有提供公共的 get/set 方法;使用fieldnames(object, '-full') 方法返回一个空单元格数组,所以我假设所有字段都是私有的。

但是,当我在 Matlab 变量查看器中查看对象时,我想要的数据字段是可见的(我假设变量查看器显示了所有对象字段和属性,尽管对此我也不确定)。

有什么方法可以在 Matlab 中以编程方式访问这些字段?我看过一些关于使用反射的帖子,但不清楚这在 Matlab 中如何/是否有效?

谢谢

【问题讨论】:

  • 针对现在已删除的评论:methodsview 列出了该类公开的公共方法。我想访问原始开发人员未提供任何公共 get/set 方法的数据。将变量保持私有可能有充分的理由,但出于我的需要,我想将其提取以进行分析。我不明白的是 Matlab 查看器(和工具提示!)如何“看到”类中的数据,但我无法在我的程序中访问它。

标签: java matlab reflection undocumented-behavior


【解决方案1】:

下面是一个使用Java反射访问类中私有字段的例子(借用this post

获取以下 Java 类(不要忘记使用 javaaddpath 使其可供 MATLAB 访问):

Test.java

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2017-03-06
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多