Передача типа класса в параметры метода

229
04 декабря 2018, 13:30

Как передать тип класса в метод и работать с ним ? Допустим имеются 2 класса Cat и Dog;

В классе Main я создаю экземпляры классов и использую метод Job.doStuff (здесь и далее псевдокод)

Cat cat = new Cat(2);
Dog dog = new Dog(5);
Job.doStuff(Dog, dog)   // тут поля заполняются вручную каждый раз

В классе, скажем, Job , у меня есть метод doStuff, который принимает какой-либо класс, создает пустой ArrayList типа переданного класса(Например Cat или Dog) :

Class Job { 
 doStuff( Class<?> , Object obj)
 { ArrayList<?> list = new....;
   list.add(obj);  } }

Собственно, как сделать так, чтобы метод doStuff понимал, какой класс в него передан, и, соответственно, как описать это в параметрах строки с комментарием ?

Answer 1

Используйте дженерики (generics):

public class Main {
    public static void main(String[] args) {
        Job job = new Job();
        job.<Animal>doStuff(new Dog(), new Cat());
        job.<Dog>doStuff(new Dog(), new Dog());
    }
}

class Job {
    <T> void doStuff(T ... animals) {}
}
class Animal{}
class Dog extends Animal{}
class Cat extends Animal{}

Ну или же определите метод следующим образом - void doStuff(Class ... instances) и гуглите всё про рефлексию в java.

READ ALSO
Как правильно завершить приложение libgdx?

Как правильно завершить приложение libgdx?

В примерах к libgdx применяется вызов Gdxapp

268
Пофиксить ошибку Last packet sent to the server was 28 ms ago

Пофиксить ошибку Last packet sent to the server was 28 ms ago

Имеется игровой сервер, который использует hibernate для работы с базой данных, спустя n-времени, сервер просто выдает такую ошибку:

240
Не работает гамбургер (при нажатии меню не открывается)

Не работает гамбургер (при нажатии меню не открывается)

Не открывается почему то меню при нажатии на гамбургерБраузер пишет: "ReferenceError: toggleMenu is not defined"

259