Все мы знаем как создавать объекты любого класса в Java: просто используем ключевое слово new
. В этой статье я собрал другие известные способы создать новый экземпляр класса. Just for fun!
Способы создания экземпляра класса без ключевого слова new
Ниже мы рассмотрим 5 способов (наверняка их еще больше):
Class.forName()
ClassLoader loadClass()
clone()
- Десериализация
Reflection API
С использованием методов forName() + newInstance() класса Class
1 2 |
Class classIdn = Class.forName("SimpleClass"); SimpleClass simpleClassObject = (SimpleClass) classIdn.newInstance(); |
Как видите, с помощью forName()
мы загрузили класс в память, затем получили экземпляр этого класса с помощью newInstance()
и с помощью приведения типов получили нужный объект.
С использованием метода loadClass()
Этот способ очень похож на предыдущий и по сути делает тоже самое, но с помощью ClassLoader:
1 |
instance.getClass().getClassLoader().loadClass("SimpleClass").newInstance(); |
С использованием метода clone() класса Object
Получаем новый экземпляр с помощью клонирования существующего объекта:
1 2 |
SimpleClass object = new SimpleClass(); SimpleClass clonedObject = (SimpleClass) object.clone(); |
С использованием сериализации и десериализации
Передаем существующий InputStream
в качестве параметра конструктору класса ObjectInputStream
и вызываем readObject()
для получения экземпляра класса.
1 2 |
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream); SimpleClass simpleObject = (SimpleClass) objectInputStream.readObject(); |
С использованием Reflection API
Пожалуй, это самый популярный способ создания экземпляра класса после использования ключевого слова new
. Рефлексия используется в большинстве современных Java фреймворков:
1 2 3 |
java.lang.reflect.Constructor.newInstance() и Class.newInstance() |
Подробнее об этом способе читайте в официальной документации.
Уверен, есть еще и другие способы создания нового экземпляра класса без ключевого слова new
, поэтому пишите в комментариях, если вы знаете такой.
Подписывайтесь на новые статьи по Java и Android!