MWJavaObjectRef, специальный подкласс MWArray, может использоваться, чтобы создать массив MATLAB®, это ссылается на объекты Java®. Для подробной информации об использовании об этом классе конструктор и сопоставленные методы, видят the MWJavaObjectRef страницу в Javadoc или ищут MWJavaObjectRef в поле Search Браузера документации MATLAB.
Можно найти Javadoc в в установке продукта.matlabroot/help/javabuilder/MWArrayAPI
Можно создать обертку кода MATLAB вокруг объектов Java с помощью MWJavaObjectRef. Используя этот метод, можно передать объекты в отношении функций MATLAB, клонировать объект Java в сгенерированном пакете, а также выполнить другой объект, упорядочивающий характерный для продукта MATLAB Compiler SDK™. Примеры в этом разделе представляют некоторые случаи общего использования.
Передать объект в метод MATLAB Compiler SDK Java:
Используйте MWJavaObjectRef, чтобы перенести ваш объект.
Передайте свой объект функции MATLAB. Например:
/* Create an object */
java.util.Hashtable<String,Integer> hash =
new java.util.Hashtable<String,Integer>();
hash.put("One", 1);
hash.put("Two", 2);
System.out.println("hash: ");
System.out.println(hash.toString());
/* Create a MWJavaObjectRef to wrap this object */
origRef = new MWJavaObjectRef(hash);
/* Pass it to a MATLAB function that lists its methods, etc */
result = theComponent.displayObj(1, origRef);
MWArray.disposeArray(origRef);Можно также использовать MWJavaObjectRef, чтобы клонировать объект. Продолжая пример мимоходом Объект Java в Метод MATLAB Compiler SDK Java, сделайте следующее:
Добавьте к исходному хешу.
Клонируйте объект.
(Необязательно) Продолжите добавлять элементы в каждую копию. Например:
origRef = new MWJavaObjectRef(hash);
System.out.println("hash:");
System.out.println(hash.toString());
result = theComponent.addToHash(1, origRef);
outputRef = (MWJavaObjectRef)result[0];
/* We can typecheck that the reference contains a */
/* Hashtable but not <String,Integer>; */
/* this can cause issues if we get a Hashtable<wrong,wrong>. */
java.util.Hashtable<String, Integer> outHash =
(java.util.Hashtable<String,Integer>)(outputRef.get());
/* We've added items to the original hash, cloned it, */
/* then added items to each copy */
System.out.println("hash:");
System.out.println(hash.toString());
System.out.println("outHash:");
System.out.println(outHash.toString()); Для ссылки вот исходный код для addToHash.m:
addToHash.m
function h2 = addToHash(h)
% Validate input
if ~isa(h,'java.util.Hashtable')
error('addToHash:IncorrectType', ...
'addToHash expects a java.util.Hashtable');
end
% Add an item
h.put('From MATLAB',12);
% Clone the Hashtable and add items to both resulting objects
h2 = h.clone();
h.put('Orig',20);
h2.put('Clone',21);
В дополнение к передаче в созданных объектах, как мимоходом Объект Java в Метод MATLAB Compiler SDK Java, можно также использовать MWJavaObjectRef, чтобы передать во вспомогательных объектах Java, таких как java.util.date. Для этого выполните следующие шаги:
Получите текущую дату и время с помощью объекта Java java.util.date.
Создайте экземпляр MWJavaObjectRef, в который можно перенести объект Java.
Передайте его функции MATLAB, которая выполняет последующую обработку, такую как nextWeek.m. Например:
/* Get the current date and time */
java.util.Date nowDate = new java.util.Date();
System.out.println("nowDate:");
System.out.println(nowDate.toString());
/* Create a MWJavaObjectRef to wrap this object */
origRef = new MWJavaObjectRef(nowDate);
/* Pass it to a MATLAB function that calculates one week */
/* in the future */
result = theComponent.nextWeek(1, origRef);
outputRef = (MWJavaObjectRef)result[0];
java.util.Date nextWeekDate =
(java.util.Date)outputRef.get();
System.out.println("nextWeekDate:");
System.out.println(nextWeekDate.toString());nextWeek.m:
nextWeek.m
function nextWeekDate = nextWeek(nowDate)
% Validate input
if ~isa(nowDate,'java.util.Date')
error('nextWeekDate:IncorrectType', ...
'nextWeekDate expects a java.util.Date');
end
% Use java.util.Calendar to calculate one week later
% than the supplied
% java.util.Date
cal = java.util.Calendar.getInstance();
cal.setTime(nowDate);
cal.add(java.util.Calendar.DAY_OF_MONTH, 7);
nextWeekDate = cal.getTime();Если вы хотите фактические объекты Java, возвращенные в метод (без MATLAB wrappering), используйте unwrapJavaObjectRefs.
Этот метод рекурсивно соединяет один MWJavaObjectRef, или многомерный массив MWJavaObjectRef возражает против ссылки или массива ссылок.
Следующие фрагменты кода показывают два примера вызова unwrapJavaObjectRefs:
Возврат Одной Ссылки или Ссылки на Массив Объектов с unwrapJavaObjectRefs
Hashtable<String,Integer> myHash =
new Hashtable<String,Integer>();
myHash.put("a", new Integer(3));
myHash.put("b", new Integer(5));
MWJavaObjectRef A =
new MWJavaObjectRef(new Integer(12));
System.out.println("A referenced the object: "
+ MWJavaObjectRef.unwrapJavaObjectRefs(A));
MWJavaObjectRef B = new MWJavaObjectRef(myHash);
Object bObj = (Object)B;
System.out.println("B referenced the object: "
+ MWJavaObjectRef.unwrapJavaObjectRefs(bObj))Производит следующий вывод:
A referenced the object: 12
B referenced the object: {b=5, a=3}Возврат Массива Ссылок с unwrapJavaObjectRefs
MWJavaObjectRef A =
new MWJavaObjectRef(new Integer(12));
MWJavaObjectRef B =
new MWJavaObjectRef(new Integer(104));
Object[] refArr = new Object[2];
refArr[0] = A;
refArr[1] = B;
Object[] objArr =
MWJavaObjectRef.unwrapJavaObjectRefs(refArr);
System.out.println("refArr referenced the objects: " +
objArr[0] + " and " + objArr[1]);Производит следующий вывод:
refArr referenced the objects: 12 and 104
Для полного примера того, как использовать MWJavaObjectRef, чтобы создать ссылку на объект Java и передать его методу, смотрите Объекты Передачи Java к MATLAB.