Как использовать переданные в универсальных списках объектов и вернуть универсальный объект с помощью моего метода Java? - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь сделать свое приложение более эффективным, используя дженерики Java, но у меня нет большого опыта дженериков.Я пытаюсь сделать это:

Мои два объекта модели:

public class Person {
    private String firstName;
    private String lastName;
    private int age;
    // ...

    // Getters and Setters Here
}

public class Car {
    private String make;
    private String model;
    private int year;
    // ...

    // Getters and Setters Here
}

Мои объекты результата:

private class PersonResult {
    private boolean success;
    private String notes;
    private int score;

    // Getters and Setters Here
}

private class CarResult {
    private boolean success;
    private String notes;
    private int score;
    private double price;

    // Getters and Setters Here
}

Мой основной класс:

public class MyClass{

    public mainMethod(){

        List<Person> listOfPersons = new ArrayList<>();
        List<Car> listOfCars = new ArrayList<>();

        listOfPersons.add(// a Person object);
        // ...

        listOfCars.add(// a Car object);
        // ...

        PersonResult = resultMethod(listOfPersons);
        CarResult = resultMethod(listOfCars);
    }

    private <E,T> E resultMethod(List<T> listOfData)
    {
        Engine engine = EngineFactory.getEngine();

        // if(listOfData.contains(Person.class))
        if (listOfData instanceof List<Person>)
        {
            PersonResult personResult = new PersonResult();
            perosnResult = engine.getPersonResult(listOfData);
            return personResult;
        }
        // else if(listOfData.contains(Car.class))
        else if (listOfData instanceof List<Car>)
        {
            CarResult carResult = new CarResult();
            carResult engine.getCarResult(listOfData);
            return carResult;
        }

        return null;
    }
}

Однако моя IDE жалуется на:

1 Illegal generic type for instanceof

2 (для возвращаемого значения) Incompatible types: Required: E - Found PersonResult

Как видите, я также попытался listOfData.contains(Person.class), который позаботился об ошибке # 1, но не об ошибке возврата.

1 Ответ

0 голосов
/ 28 сентября 2019

Вы не можете проверить общие параметры с помощью instanceof.instanceof будет оцениваться во время выполнения.Но компилятор удаляет универсальные типы.Их нет во время выполнения.Например, List<Integer> будет таким же, как List во время выполнения.

Вы можете использовать простую реализацию без обобщений здесь:

private PersonResult resultMethodPerson(List<Person> listOfData) {
  return EngineFactory.getEngine().getPersonResult(listOfData);
}

private CarResult resultMethodCar(List<Car> listOfData) {
  return EngineFactory.getEngine().getCarResult(listOfData);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...