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.