2013-07-23 3 views
1

Arraylists используют следующий синтаксис: ArrayList<Object> = new ArrayList<Object>; Мне нужно добавить конструктор в мой класс GameList, который позволяет указать тип создаваемого списка. Я не понимаю, как сделать мой класс способен быть определен следующим образом:Как создать пользовательский список объектов в Java?

GameList<objectType> = new GameList(); 

Все мои объекты в игре будут спускаться из класса геймобжекты.

public class GameObject 
{ 
    String name; 
    public GameObject 
    { 
     name = "Stat"; 
    } 
    public String getName() 
    { 
     return name; 
    } 
    public void setName(String newName) 
    { 
     name = newName; 
    } 
} 

public class GameList 
{ 
    GameObject[] theList; 
    public GameList(int size) 
    { 
     theList = new GameObject[size]; 
    } 
    public GameObject parseList(String objectName) 
    { 
     for(int i = 0; i < theList.length; i++) 
      if(theList[i].getName() == objectName) 
       return theList[i]; 
     return null; 
    } 
} 
+2

Вам действительно нужно создать свой собственный список? Похоже, вы хотите HashMap, если вы собираетесь извлекать объекты по их имени. – Kayaman

+0

Я уверен, что вы правильно, но я не знаком с hashMap. Я просто подумал, что сделаю свой собственный класс по этому вопросу. Вы можете рассказать мне больше о них? – CodeManiak

+0

Карты позволяют связывать ключи со значениями. Поскольку вы используете objectName в качестве ключа, вам не нужна структура данных типа List. Вы можете просто сделать map.put («someName», myObject) и map.get («someName»); Реализация основных структур данных сама по себе хороша для практики, но они уже реализованы на языке. – Kayaman

ответ

4

Что вы ищете, это Generics. Синтаксис будет

public class GameList<T> { 
    T[] theList; 
    ... 
+0

Интересно. У меня больше опыта работы с C++, поэтому я узнал об этом как о шаблоне. Теперь я знаю, как шаблон в java также! Благодаря! – CodeManiak

+1

Как класс создаст новый T [], похожий на конструктор OP * GameList (int size) *? –

+1

Один из способов заключается в том, чтобы не вводить его как Т, а вместо этого как объект [] (это делает ArrayList). Другой способ - использовать объект класса, переданный для создания массива через отражение (это более громоздко). – Kayaman

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