Java Используйте строку как вызов объекта

1

Добрый день, я хотел бы спросить о методах использования строки в качестве ссылки.

Скажем, у меня есть два объекта типа LinkedList именем ChinaShip и HongkongShip

Обычно, если я хотел получить доступ к методу (например, getFirst()), я ChinaShip.getFirst()

Теперь скажем, что в другом объекте я получил переменную Destination содержимое которой является строкой. Примером Контента будет China и Hongkong

Можно ли использовать содержимое переменной как имя для доступа к объекту LinkedList?

мой подход сначала должен был бы соединить сначала переменную, которая будет Destination + "Ship"

Это создаст string которая является ChinaShip и HongkongShip

Причина, по которой я делаю это, а не сравнение строки, состоит в том, что Destination состоит из сотен возможностей.

Большое спасибо.

С Уважением,

  • 1
    Нет, но вы могли бы использовать Map какой-то
  • 0
    вы можете попробовать HashMap или LinkedHashMap, где вы можете хранить информацию в паре ключ = значение
Показать ещё 1 комментарий
Теги:
string
object

4 ответа

1
Лучший ответ

К сожалению, вы не можете сделать это на 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();
}
  • 0
    Это именно то, что мне нужно сделать. Спасибо Сир: D
1

Вы можете использовать API отражения. Если списки объявлены в классе MyClass, вы можете использовать следующий код:

LinkedList list = (LinkedList) MyClass.class.getDeclaredField(Destination + "Ship").get(this);

Это предполагает, что вышеуказанный код вызывается из объекта MyClass, иначе вызов get(this) должен быть изменен для get(myClassInstance). Хотя, как упоминает MadProgrammer, вам может быть лучше использовать карту.

1

Вы можете использовать карту и использовать строку desitnation как свой ключ, потому что они будут уникальными:

Map<Desitnation, value> destinations = new HashMap<Desitnation, value>();

затем выполните поиск по карте для ключа назначения:

http://www.tutorialspoint.com/java/util/hashmap_get.htm

0

Я думаю, вам нужно переделать свою архитектуру. Вам не нужно создавать имена методов из строк.

Мне кажется, что вам нужен объект Ship, у которого есть пункт назначения, и связанный список кораблей.

Если вам нужно сопоставить суды по месту назначения, то вы также можете сделать карту, где они являются целевой строкой, а значение - связанный список кораблей, отправляющихся в этот пункт назначения.

Поэтому, если вы выполните map.get("Китай"), вы получите список кораблей, отправляющихся в Китай, и оттуда вы сможете делать то, что хотите.

  • 0
    Да, это именно то, что мне нужно сделать. Большое спасибо, сэр, я постараюсь это сделать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню