Pur*_*uit 29
有三种情况需要考虑.
Java内置库.
map = java.util.HashMap;
map.put(1,10);
map.put(2,30);
map.get(1) %returns 10
Run Code Online (Sandbox Code Playgroud)
唯一的复杂因素是Matlab在Matlab数据类型和Java数据类型之间执行的映射.这里描述了这些映射(Matlab到Java)和这里(Java到Matlab).(tl; dr:通常映射如你所料)
预编译*.jar文件
首先需要将这些添加到Matlab的java类路径中.您可以动态执行此操作(即,每个Matlab会话,没有必需的Matlab状态),如下所示:
javaaddpath('c:\full\path\to\compiledjarfile.jar')
Run Code Online (Sandbox Code Playgroud)
您还可以通过编辑classpath.txt文件来静态添加这些文件.欲了解更多信息使用docsearch java class path.
预编译的*.class文件.
这些类似于*.jar文件,除了您需要添加包含类文件的目录,而不是类文件本身.例如:
javaaddpath('c:\full\path\to\directory\containing\class\files\')
%NOT THIS: javaaddpath('c:\full\path\to\directory\containing\class\files\classname.class')
Run Code Online (Sandbox Code Playgroud)mac*_*uff 24
好的,我会尝试在这里给出一个小例子.可以像在zellus建议的那样使用Matlab窗口中的java函数,或者,如果需要,可以创建自己的java类.这是一个例子:
package testMatlabInterface;
public class TestFunction
{
private double value;
public TestFunction()
{
value = 0;
}
public double Add(double v)
{
value += v;
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
然后将其转换为jar文件.假设您将文件放在一个名为的文件夹中testMatlabInterface,请在命令行运行此命令:
jar cvf testMatlab.jar testMatlabInterface
Run Code Online (Sandbox Code Playgroud)
然后,在Matlab中,导航到文件所在的目录testMatlab.jar并运行命令,import testMatlabInterface.*以导入testMatlabInterface包中的所有类.然后你可以像这样使用这个类:
>> methodsview testMatlabInterface.TestFunction
>> me = testMatlabInterface.TestFunction()
me =
testMatlabInterface.TestFunction@7e413c
>> me.Add(10)
ans =
10
>> me.Add(10)
ans =
20
>> me.Add(10)
ans =
30
Run Code Online (Sandbox Code Playgroud)
如果我能得到进一步的帮助,请告诉我.