Добрый день, я хотел бы спросить о методах использования строки в качестве ссылки.
Скажем, у меня есть два объекта типа LinkedList
именем ChinaShip
и HongkongShip
Обычно, если я хотел получить доступ к методу (например, getFirst()
), я ChinaShip.getFirst()
Теперь скажем, что в другом объекте я получил переменную Destination
содержимое которой является строкой. Примером Контента будет China
и Hongkong
Можно ли использовать содержимое переменной как имя для доступа к объекту LinkedList?
мой подход сначала должен был бы соединить сначала переменную, которая будет Destination + "Ship"
Это создаст string
которая является ChinaShip
и HongkongShip
Причина, по которой я делаю это, а не сравнение строки, состоит в том, что Destination
состоит из сотен возможностей.
Большое спасибо.
С Уважением,
К сожалению, вы не можете сделать это на Java. Но это ближе:
HashMap<String, LinkedList> dest = new HashMap<String, LinkedList>();
dest.put("China", ChinaShip);
dest.put("Hongkong", HongkongShip);
.....
if(dest.containsKey(Destination){
dest.get(Destination).getFirst();
}
Вы можете использовать API отражения. Если списки объявлены в классе MyClass, вы можете использовать следующий код:
LinkedList list = (LinkedList) MyClass.class.getDeclaredField(Destination + "Ship").get(this);
Это предполагает, что вышеуказанный код вызывается из объекта MyClass, иначе вызов get(this)
должен быть изменен для get(myClassInstance)
. Хотя, как упоминает MadProgrammer, вам может быть лучше использовать карту.
Вы можете использовать карту и использовать строку desitnation как свой ключ, потому что они будут уникальными:
Map<Desitnation, value> destinations = new HashMap<Desitnation, value>();
затем выполните поиск по карте для ключа назначения:
Я думаю, вам нужно переделать свою архитектуру. Вам не нужно создавать имена методов из строк.
Мне кажется, что вам нужен объект Ship, у которого есть пункт назначения, и связанный список кораблей.
Если вам нужно сопоставить суды по месту назначения, то вы также можете сделать карту, где они являются целевой строкой, а значение - связанный список кораблей, отправляющихся в этот пункт назначения.
Поэтому, если вы выполните map.get("Китай"), вы получите список кораблей, отправляющихся в Китай, и оттуда вы сможете делать то, что хотите.
Map
какой-то