Карта
Можете ли вы использовать реализацию Map , такую как HashMap ?
] import java.util.HashMap; import java.util.Map; public class test {public static void main (String [] args) {// Заполните вашу структуру карты Map & lt; String, Integer & gt; theMap = new HashMap & lt; String, Integer & gt; (); for (int i = 1; i & lt; = 100; i ++) {theMap.put ("a" + i, i); } // После этого вы можете получить доступ ко всем своим значениям System.out.println ("a55 value:" + theMap.get ("a55")); }}
Выход программы:
Значение a55: 55
Нет гарантии, что T имеет связанный с ним GUID, и на этом языке нет средств для записи ограничения на параметр типа, чтобы сделать эту гарантию.
Имя интерфейса преобразуется в GUID компилятором, который ищет имя в таблице символов, получает структуру данных компилятора, представляющую интерфейс, и проверяет соответствующее поле для GUID. Но generics не похожи на шаблоны C ++; они должны быть скомпилированы и проверены по типу и известны для работы для любого допустимого параметра типа, а это означает ограничение параметра типа в его объявлении.
Вы можете получить GUID с помощью RTTI (сначала проверяя, что T на самом деле представляют интерфейс) с чем-то вроде GetTypeData (TypeInfo (T)) ^. Guid
и передать GUID на таким образом поддерживает
.
Почему вы даже беспокоитесь?
Чтобы использовать этот TFunctions.GetInterface, вам нужно:
Если у вас есть это, вы можете просто вызвать Supports () напрямую:
intf: = TFunctions.GetInterface & lt; IMyInterface & gt; (myObject);
является точно , эквивалентным:
Поддерживает (IMyInterface, myObject, intf);
Использование дженериков здесь пустая трата времени и усилий и действительно задает вопрос «Зачем это делать?».
Это просто усложняет чтение (как так как это часто случается с дженериками) и является более громоздким в использовании.
Supports () возвращает удобное логическое значение для указания успеха / отказа, которое вы должны тестировать отдельно с помощью вашей обертки:
intf: = TFunctions.GetInterface & lt; IMyInterface & gt; (myObject); Если Assigned (intf), то // ...
против:
, если поддерживает (IMyInterface, myObject, intf), то // Мы можем использовать intf
При создании оберток вокруг функциональности обычно бывает, что результатом является улучшение читабельности или удобства использования.
imho это не работает по обоим пунктам, и вы должны просто придерживаться с самой поддержкой функции Supports ().