Java как передать класс в качестве параметра
Перейти к содержимому

Java как передать класс в качестве параметра

  • автор:

Как передать класс в метод java

Чтобы передать класс в метод Java , нужно использовать его имя как параметр.

public class MyClass  public void myMethod(Class parameterClass)  // Тело метода > > // Использование метода MyClass myClass = new MyClass(); myClass.myMethod(String.class); 

В данном примере мы передаем класс String в качестве параметра в метод myMethod

Java как передать класс в качестве параметра

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

public class Program < public static void main(String[] args) < Person kate = new Person("Kate"); System.out.println(kate.getName()); // Kate changeName(kate); System.out.println(kate.getName()); // Alice >static void changeName(Person p) < p.setName("Alice"); >> class Person < private String name; Person(String name)< this.name = name; >public void setName(String name) < this.name = name; >public String getName() < return this.name; >>

Здесь в метод changeName передается объект Person, у которого изменяется имя. Так как в метод будет передаваться копия ссылки на область памяти, в которой находится объект Person, то переменная kate и параметр p метода changeName будут указывать на один и тот же объект в памяти. Поэтому после выполнения метода у объекта kate, который передается в метод, будет изменено имя с «Kate» на «Alice».

От этого случая следует отличать другой случай:

public class Program < public static void main(String[] args) < Person kate = new Person("Kate"); System.out.println(kate.getName()); // Kate changePerson(kate); System.out.println(kate.getName()); // Kate - изменения не произошло // kate хранит ссылку на старый объект >static void changePerson(Person p) < p = new Person("Alice"); // p указывает на новый объект p.setName("Ann"); >static void changeName(Person p) < p.setName("Alice"); >> class Person < private String name; Person(String name)< this.name = name; >public void setName(String name) < this.name = name; >public String getName() < return this.name; >>

В метод changePerson также передается копия ссылки на объект Person. Однако в самом методе мы изменяем не отдельные значения объекта, а пересоздаем объект с помощью конструктора и оператора new. В результате в памяти будет выделено новое место для нового объекта Person, и ссылка на этот объект будет привоена параметру p:

static void changePerson(Person p) < p = new Person("Alice"); // p указывает на новый объект p.setName("Ann"); // изменяется новый объект >

То есть после создания нового объекта Person параметр p и переменная kate в методе main будут хранить ссылки на разные объекты. Переменная kate, которая передавалась в метод, продолжит хранить ссылку на старый объект в памяти. Поэтому ее значение не меняется.

Передать класс в аргументе метода

Я не понимаю как передать в метод класс, принадлежность к которому я хочу проверять (и вообще возможно ли). Как это сделать и будет ли сравнение верно при том условии что все объекта хранятся как Object? Плюс вот еще что. Я хочу сделать универсальный класс возврата нескольких объектов из метода. Метод возвращает ObjectCollecton, а дальше любой другой объект извлекается из его через objectCollction.get(Class.class) . У меня есть такое подозрение что я изобретаю велосипед из-за недостаточных знаний языка, есть ли дефолтное решение задачи?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Невозможно передать ArrayList в аргументы метода без модификатора static у этого метода или метода main
Крч, хочу передать экземпляр класса ArrayList в метод, но ide говорит, что нельзя это сделать, пока.

@ в аргументе метода
подскажите плиз, что означает следующая запись method(. object @param)? меня интересует именно.

Делегат в аргументе метода
Добрый день, есть метод и два его вызова, в чем их различие? static void Main() .

Класс: Формальным параметром метода должна быть ссылка на абстрактный класс.
"Формальным параметром метода должна быть ссылка на абстрактный класс или наиболее общий интерфейс.

2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978

если я правильно понял задачу
и даже не уверен что это хорошее решение, может отцы зайдут покритикуют

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
public class Something { public static void main(String[] args) { Wrapper w = new Wrapper(); w.put("String 1"); w.put("String 2"); w.put(42); w.put("String 3"); ArrayListInteger> elements = w.getElements(Integer.class); System.out.println(elements.size()); // 1 // ArrayListString> stringArrayList = w.getElements(String.class); System.out.println(stringArrayList.size()); // 3 } } class Wrapper { private ListObject> list = new ArrayList<>(); public void put(Object object) { list.add(object); } public T> ArrayListT> getElements(ClassT> clazz) { ArrayListT> objects = new ArrayList<>(); for (Object o : list) { if (o.getClass().equals(clazz)) objects.add((T) o); } return objects; } }

Как передать класс объекта в качестве параметра?

Так как здесь много однообразной работы (вызов activity), то хотелось бы оптимизировать. Что-то вроде этого:

public void classUsing (String s) < Intent intent = new Intent(this, s.class); startActivity(intent); >@Override public void onClick(View v) < switch (v.getId()) < case R.id.btnGallery: classUsing(ClassName1); break; case R.id.btnNew: classUsing(ClassName2); break; case R.id.btnPrice: classUsing(ClassName3); break; . >> 

Как передать название класса в виде аргумента в другой метод и там его использовать?
Отслеживать
19.1k 6 6 золотых знаков 30 30 серебряных знаков 44 44 бронзовых знака
задан 12 июл 2016 в 10:23
user208111 user208111
115 2 2 серебряных знака 9 9 бронзовых знаков

Можно было просто startActivity(intent) вынести за кейсы и все. Будет намного лаконичней, чем писать отдельный метод.

12 июл 2016 в 17:07

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

.class имеет тип Class . Вы можете передать в метод класс как параметр таким образом:

public void doSomething(Class clazz)
doSomething(Class1.class); 

Отслеживать
ответ дан 12 июл 2016 в 10:27
Vladyslav Matviienko Vladyslav Matviienko
20.4k 2 2 золотых знака 29 29 серебряных знаков 52 52 бронзовых знака

Спасибо, а как собственно передать название класса? т.к case R.id.btnGallery: classUsing(ClassName); break; вызывает ошибку

12 июл 2016 в 10:34
@user208111 classUsing(ClassName.class);
12 июл 2016 в 10:39
Спасибо за помощь. =)
12 июл 2016 в 10:40

  • java
  • android
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *