2013-07-13 2 views
-1

У меня есть игра в java с около 7 000 игровых предметов. Каждая часть расширяет базовый объект под названием Card. Каждая часть имеет другое свойство (что она может сделать). Как получить объект по его названию в java


Мне нужно динамически загружать эти объекты, называя их имя. Так сказать. Пользователь хотел использовать карточку под названием «Карточка № 1». Он набрал «Карточка № 1», и затем должен создать новый объект «Card_no1». Как мне это сделать?
Я думал о размещении каждого объекта в Hashtable и использовании его имени в качестве ключа. Любые лучшие идеи?
EDIT: У меня уже есть объекты карты, запрограммированные. Я просто не уверен, как их загрузить. Мне нужно уметь их возвращать, используя свое имя, НЕ создавайте новый объект и назовите его. Это потому, что я должен программировать каждый индивидуальный эффект.

+1

Объекты не имеют * имеют * имена, если вы не отдаете их им (например, имея поле «имя»). Если вы думаете о своих * переменных * именах, они совсем разные. Переменные указываются только во время компиляции - вы не можете создать новое поле во время выполнения. –

+0

@jonskeet Спасибо, я понял, что, хотя, вот почему я тупик относительно того, как это сделать. В принципе, это должна быть очень маленькая игра «yu-gi-oh». Но я не привык думать с точки зрения ООП. – snocavotia

ответ

0

Если для каждой карты есть файл класса, и вы хотите создать новый объект при вызове, то то, что вам нужно, не обязательно должно включать hashtables. Сделайте что-то вроде этого вместо (программно создать экземпляр класса):

import java.lang.reflect.*; 
import java.lang.reflect.Constructor.*; 

String cardName = <whatever> 
Card newCard = Class.forName(cardName).getDeclaredConstructor().newInstance(); 

Если части игры представлены объектами, а не файлы классов (т.е. вы не имеете 7000 различных файлов классов), то каждая карта должна иметь name поле. В этом случае что-то, что вы могли бы сделать, было бы привязать их все в хэш-карте, используя их имя в качестве ключа. Затем, когда вы хотите создать новую карту определенного типа, извлеките ее объект и вызовите clone().

+0

Спасибо (: so much! – snocavotia

+0

Рад, что я мог бы помочь. Просто любопытно - у вас на самом деле есть 7000 файлов классов? –

+0

7000 был просто номером. У меня около 150 игровых предметов. И да, у меня есть файл класса для каждый из них, потому что их эффекты различны и должны быть жестко закодированы. – snocavotia

0

Я думаю, что вы пытаетесь достичь это

Как пользователь тип карты не 1, создать новый объект с определенным свойством набора со значением как «Card No1». Поэтому, как только пользователь ввести некоторое имя карты, создать новый объект

String userInput= req.getParamter("cardSeq"); 
Card card1 = new Card(); 
card1.setName(userInput) 

Хотя ответ очень прост, но это то, что я думаю, что вы пытаетесь достичь.

0

Вы уже знаете лучший способ получить карту из пула 7000 карт HashMap. Используйте HashMap вместо HashTable по причинам, связанным с синхронизацией.

И не забывайте переопределять методы hashCode и equals правильно.

Смежные вопросы