2012-01-07 3 views
1

Как создать экземпляр объекта с помощью класса класса?Создание объектов с использованием класса класса

Я хотел бы передать объект класса функции и имеет, что функция возвращает новый объект класса я передаю в.

я буду делать отливку после того, как я получаю объект обратно. Кроме того, есть ли какие-либо предложения по шаблонам проектирования для такого рода вещей?

Вот несколько примеров кода псевдо, который показывает, что я хочу сделать:

Class Animal { 
    String name; 
} 

Class Cat extends Animal { 
    boolean hasTail; 
} 

MAIN:

Class myClass = Cat.class; 
Animal createAnimal(myClass) { 
    return new myClass; 
} 

Edit:

Кроме того, есть ли способ, чтобы бросить в мой перед возвратом нового экземпляра или я придерживаюсь типа объекта по умолчанию?

return (myClass)myClass.newInstance(); 
+0

Является ли это домашнее задание? – Perception

+0

То, что вы хотите достичь, ужасно напоминает шаблон Factory. Проверьте это: http://www.allapplabs.com/java_design_patterns/factory_pattern.htm и аннотируйте свой вопрос домашним тегом –

+0

@Перцепция № Но я возьму любые ресурсы, которые вы публикуете и читаете на нем. – Matthew

ответ

2

я буду делать кастинг после того, как получить объект обратно.

Кроме того, есть способ, чтобы включить в мою функцию, прежде чем возвращать новый экземпляр, или я придерживался стандартного типа объекта?

Вам не нужно делать кастинг, если вы воспользуетесь дженериками. Дженерики описаны в относительно вводного подробно here

Вот пример Java, полученный из вашего псевдо кода с использованием дженериков и отражения:

public class ReflectionNewInstanceTest { 

    static class Animal { 
     String name; 
    } 

    static class Cat extends Animal { 
     boolean hasTail = true; 
    } 

    public static void main(String[] args) throws Exception { 
     Animal a = createAnimal(Cat.class); 
    } 


    static <T extends Animal> T createAnimal(Class<T> clazz) throws Exception { 
     return clazz.newInstance(); 
    } 

} 

Что касается моделей, любой из типичных порождающих моделей следует рассматривать, когда вам хотят отвлечься от создания объектов. Простейший, вероятно, просто использует заводской метод. Пример, который я привел выше, - это просто фабричный метод общего назначения, который на самом деле не очень сильно вас выгоден.Вот довольно короткий список шаблонов, вы должны смотреть вверх:

  • Абстрактный узор завод
  • метод Завод шаблон
  • Builder шаблон
  • Прототип шаблон
6

Я подозреваю, что вы хотите Class.newInstance(). Обратите внимание, что вы назовете его Cat.class, а не Cat.getClass().

Обратите внимание, что newInstance() всегда будет пытаться вызвать конструктор без параметров: если вам нужно передать какие-либо аргументы, используйте getConstructors(), чтобы найти конструкторы, объявленные этим классом, а затем вызвать соответствующий.

+0

это будет работать только в том случае, если у его класса есть конструктор no-args (который, кажется, сейчас имеет место), поэтому +1 –

+0

Говорят, что есть аргументы ... я просто поместить параметры в вызов? Ex. Class.newInstance (arg1, arg2)? – Matthew

+0

@Matthew: Нет, вы вызываете 'getConstructors()', находите соответствующий, затем вызываете 'constructor.newInstance (arg1, arg2, ...)' –

1

Возможно, вы ищете методы getConstructor() и newInstance() в классах классов конструкторов.

Если конструктор гарантированно не иметь никаких аргументов, вы можете также обсчитывать и использовать newInstance() [в классе]

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