Incorrect Java Data Types
Java String to MATLAB Character Vector
Struct of Character Vectors
Some MATLAB® functions accept a struct
of
name-value pairs as input arguments. The MATLAB Engine API for Java® provides
the com.mathworks.matlab.engine.Struct
class
to create this data structure in Java and pass it to MATLAB,
where it is converted to a MATLAB struct
.
Some MATLAB functions that accept struct
input
require field values to be MATLAB character vectors (char
) instead of MATLAB strings
(string
). To create a Java Struct
with
the correct type of values, convert from String
to char
array
before passing the variable to MATLAB.
You can use the toCharArray
method for the
conversion:
char[] on = "on".toCharArray();
char[] yOut = "yOut".toCharArray();
char[] tOut = "tOut".toCharArray();
Struct simParam = new Struct("SaveOutput", on, "OutputSaveName",
yOut,"SaveTime", on, "TimeSaveName", tOut);
String Argument to Character Vector
When MATLAB functions require char
inputs,
you can convert the Java String
in the function
call passed to MATLAB. For example, the MATLAB eval
function requires char
input:
double result = engine.feval("eval", "3+5");
Undefined function 'eval' for input arguments of type
'string'
Passing a char
array works correctly.
double result = engine.feval("eval", "3+5".toCharArray());
Setting Graphics Object Properties from Java
You can set the values of MATLAB graphics object properties
using the handle of the object. Pass the property names and property
values as Java char
arrays when passing to MATLAB functions.
double[][] data = {{1.0, 2.0, 3.0}, {-1.0, -2.0, -3.0}};
HandleObject[] h = eng.feval("plot", (Object)data);
String property = ("HitTest");
String value = ("off");
eng.feval(0,"set", h, property.toCharArray(), value.toCharArray());
Java Integer to MATLAB double
Some MATLAB functions, such as sqrt
restrict
the input to double
or single
precision
values. The MATLAB engine converts Java integers to MATLAB int32
values. For MATLAB functions
that do not accept integer values, ensure that you pass appropriate
numeric values.
double result = engine.feval("sqrt", 4);
Undefined function 'sqrt' for input arguments of type 'int32'.
Passing a double works correctly.
double result = engine.feval("sqrt", 4.0);