【问题标题】:importing java classes in matlab classdef在matlab classdef中导入java类
【发布时间】:2013-05-06 21:10:58
【问题描述】:

我有一个使用 classdef 定义的 matlab 类。

我正在为一些 java 东西创建一个包装器,并且需要导入几个类。

我不知道在哪里导入这些类,目前我可以根据需要在每个方法中导入它们......这很痛苦。

有什么想法吗?

【问题讨论】:

    标签: java matlab oop import matlab-class


    【解决方案1】:

    是的,你需要将它们导入到每个方法中,这很痛苦。

    【讨论】:

      【解决方案2】:

      一个小测试确认你需要在每个方法中重复导入列表:

      classdef MyClass < handle
          properties
              s
          end
          methods
              function obj = MyClass()
                  import java.lang.String
                  obj.s = String('str');
              end
              function c = func(obj)
                  c = String('b');      %# error: undefined function 'String'
              end
          end
      end
      

      【讨论】:

        【解决方案3】:

        两个答案都不正确(不再正确?)。您可以将导入的类分配给类对象的属性并在不重新导入的情况下访问它们。以下代码运行良好(在 Matlab 2016a 中测试):

        classdef moveAndClick < handle
            properties (Access = private)
                mouse;
                leftClick;
            end
        
            methods
                %% Constructor
                function obj = moveAndClick()
                    import java.awt.Robot;
                    import java.awt.event.InputEvent;
                    obj.mouse = Robot;
                    obj.leftClick = InputEvent.BUTTON1_MASK;
                end
        
                %% Destructor
                function delete (~)
                end
        
                function moveClick (obj, positionX, positionY)
                    % move mouse to requested position
                    obj.mouse.mouseMove(positionX, positionY);
        
                    % click on the current position
                    obj.mouse.mousePress(obj.leftClick);
                    obj.mouse.mouseRelease(obj.leftClick);
                end
            end
        end
        

        【讨论】:

        • 你错了。您分配给该属性的是一个对象 instance (通过空参数构造函数创建)。然后,您只是引用此对象实例,它与类导入无关。如果要在moveClick 中创建另一个Robot() 实例,则必须再次导入该类。
        • 你是对的,我误解了这个问题。感谢您的澄清。
        猜你喜欢
        • 1970-01-01
        • 2014-05-31
        • 2015-09-21
        • 1970-01-01
        • 2016-11-05
        • 2019-03-26
        • 2019-01-18
        • 1970-01-01
        • 2023-04-10
        相关资源
        最近更新 更多