2015-04-01 2 views
1

Im делает небольшое текстовое приключение. В настоящее время я работаю над инвентарем. Я пытался сделать свой инвентарь со списком: ArrayList<Object> inventar = new ArrayList<Object>(); Я инициализировать объекты, как Items:Получить объекты из списка Java

Item holzschwert = new Item("Holzschwert", 1, 5); 
       inv.addToInventar(holzschwert); 

Вот мой дополнительный метод:

public void addToInventar(Object ...item){ 
    inventar.add(item); 
} 

Но каждый раз, когда я хочу, чтобы распечатать мой инвентарь (вот мой ToString() функция) я до сих пор получить код Хэш:

@Override 
public String toString() { 
    return "Inventar [ Inventar = " + inventar + " ]"; 
} 

и мой метод печати

Object test = inv.getInventar(); 
       String ausgabe = inv.toString(); 
       System.out.println(ausgabe); 

и журнал консоли:

Inventar [ Inventar = [[Ljava.lang.Object;@281c35ec] ] 

Спасибо за вашу помощь :)

+0

Это сделало бы _much_ более ощутимым, если вы создадите интерфейс каждого типа элементов и вместо этого используйте 'ArrayList '. 'ArrayList ' подвержен ошибкам, как вы можете видеть в своем вопросе. – Tom

ответ

3

Ошибкой является

public void addToInventar(Object ...item){ 
    inventar.add(item); 
} 

Здесь item является Object[], потому что вы использовали с переменным числом аргументов (...). То, что вы видите, является результатом вызова toString на массив.

Вы хотите

public void addToInventar(Object item){ 
    inventar.add(item); 
} 

или, возможно,

public void addToInventar(Object... items){ 
    for (Object item : items) 
     inventar.add(item); 
} 

EDIT

В дополнение к этому ответу, я должен указать, что вы не должны, вероятно, использовать List<Object> в любом случае. List<Item> было бы лучше, так как ошибки, скорее всего, будут замечены компилятором. Подпись addToInventar(Object... items) следует действительно избегать, как чуму, поскольку она будет принимать буквально любой последовательность аргументов любой длины. Все ссылочные типы: Object s, и все примитивы могут быть автобоксами.

0

Override метод Позиционный класс ToString().

class Item{ 

    @override 
    public String toString(){ 
     //Give your implementation 
    } 
} 
+0

уже имеют метод string в моем классе Item. – Andi

+0

Добавьте реализацию метода toString() класса Item в свой вопрос. Также добавьте остаток кода. – Touchstone

0
@Override 
public String toString() { 
    StringBuffer stuff = new StringBuffer(); 
    for (Object item : inventar) { 
     stuff.append(item.getName()); // you need a getter for the item name 
     stuff.append(" "); 
    } 

    return stuff.toString(); 
} 

И ваш инвентарь и предметы являются объектами. Если вы просто печатать объекты, а не поля, вы получите только их адрес памяти в качестве вывода:

Ljava.lang.Object;@281c35ec 

не свойство, вы установили для них.

0

Если вы не заботитесь о точном формате вывода, вы можете сделать что-то подобное в вашем Item классе:

@Override 
public String toString() { 
    return ToStringBuilder.reflectionToString(this); 
} 

ToStringBuilder является частью библиотеки Apache Commons Lang.Если вы хотите, чтобы он был специально отформатирован определенным образом, перейдите к @Code Whisperer и напишите свою собственную реализацию.

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