內部類需要轉換'。'到Matlab中的'$'。
這實際上可能是由於Java編譯器存儲內部類對象的方式。它對內部類的行爲相似(例如javax.swing.plaf.basic.BasicTextUI$UpdateHandler
)。 Matlab不像JVM那樣自動將這些內部'$'轉換爲'。'。因此,在Matlab中,我們不能在這些情況下使用常規的簡單點符號,並且由於'$'在Matlab語法中是無效字符,所以我們必須求助於使用javaObject
,javaMethod
,awtinvoke
中的'$'及其親屬。例如:
Java: InnerClass c = new com.example.test.SomeEnum.InnerClass;
MATLAB: c = javaObject('com.example.test.SomeEnum$InnerClass')
枚舉需要類似的'。'轉換。到Matlab中的'$'。但MATLAB的javaObject
函數調用類的構造函數,因爲枚舉沒有構造函數中,我們得到以下錯誤:
No constructor with appropriate signature exists in Java class
幸運的是enum has the builtin method valueOf()
,我們可以用javaMethod
使用:
Java: SomeEnum e = com.example.test.SomeEnum.MY_FAVORITE_ENUM;
MATLAB: e = javaMethod('valueOf','com.example.test$SomeEnum','MY_FAVORITE_ENUM');
同理:
Java: int n = com.example.test.Foo.MAX_FOO;
MATLAB: n = javaMethod('com.example.test.Foo$MAX_FOO')
靜態字段可以使用簡單的點符號直接在Matlab中獲得:
redColor = java.awt.Color.red;
靜態字段的完整列表可以使用得到Matlab的內置struct
功能:
>> staticFields = struct(java.awt.Color.red)
staticFields =
white: [1x1 java.awt.Color]
WHITE: [1x1 java.awt.Color]
lightGray: [1x1 java.awt.Color]
LIGHT_GRAY: [1x1 java.awt.Color]
gray: [1x1 java.awt.Color]
GRAY: [1x1 java.awt.Color]
darkGray: [1x1 java.awt.Color]
DARK_GRAY: [1x1 java.awt.Color]
black: [1x1 java.awt.Color]
BLACK: [1x1 java.awt.Color]
red: [1x1 java.awt.Color]
RED: [1x1 java.awt.Color]
pink: [1x1 java.awt.Color]
PINK: [1x1 java.awt.Color]
orange: [1x1 java.awt.Color]
ORANGE: [1x1 java.awt.Color]
yellow: [1x1 java.awt.Color]
YELLOW: [1x1 java.awt.Color]
green: [1x1 java.awt.Color]
GREEN: [1x1 java.awt.Color]
magenta: [1x1 java.awt.Color]
MAGENTA: [1x1 java.awt.Color]
cyan: [1x1 java.awt.Color]
CYAN: [1x1 java.awt.Color]
blue: [1x1 java.awt.Color]
BLUE: [1x1 java.awt.Color]
OPAQUE: 1
BITMASK: 2
TRANSLUCENT: 3
MATLAB的,如果默認構造函數是私有(隱藏)功能javaObject
可能無法正常工作,並javaMethod
可能贏也不行。如果帶有靜態方法的類是嵌套的,那麼你可能會運氣不好。 有關文件交換我的系統托盤工具,我用了反射的方法,因爲在這個職位描述:http://UndocumentedMatlab.com/blog/setting-system-tray-popup-messages/
貸:Mark Mikofski
我假設你不能編輯Java Enum? – Instantsoup 2009-08-03 18:26:13
在某些情況下,我可以,在某些我不能 – 2009-08-03 18:26:54
這是類型安全枚舉的另一面:而不是調用loadWeirdFile('myfile.txt',1)其中有神奇的數字,但很容易,我打電話loadWeirdFile( 'myfile.txt',Options.SKIP_WEIRD_STUFF),它沒有幻數並且是類型安全的,但我無法從我的腳本環境訪問SKIP_WEIRD_STUFF常量。 :( – 2009-08-03 18:29:23