2013-05-06 43 views
1

我有一個使用classdef定義的matlab類。在matlab中導入java類classdef

我創建了一些java東西的包裝,並需要導入幾個類。

我不知道在哪裏導入這些類,到目前爲止,我可以根據需要在每種方法中導入它們......這很痛苦。

有什麼想法?

回答

2

是的,你需要將它們導入到每一個方法,這是痛苦的。

1

一個小的測試證實,你需要重複導入列表中的每一個方法:

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 
0

兩個答案都不正確(不再?)。您可以將導入的類分配給classobject的一個屬性,並在不重新導入的情況下訪問它們。下面的代碼工作得很好(在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 
+0

你錯了。分配給屬性的是對象**實例**(通過空參數構造函數創建)。然後你只是簡單地引用這個對象實例,它與類的導入無關。如果你想在'moveClick'中創建另一個Robot()'實例,你必須重新導入這個類。 – 2016-06-29 22:02:48

+0

你說得對,我誤解了這個問題。感謝澄清。 – 2016-06-30 16:08:51