Как инициализировать переменную для принятия любого данного класса - PullRequest
0 голосов
/ 29 апреля 2018

Я разрабатываю приложение Jax-RS. Мне нужно иметь общий объект ответа на каждый вызов API. Это модель этого. Переменная UserObject должна быть изменена, чтобы принимать любой класс, который я установил, используя get / set'ers. В настоящее время он может принимать только класс Клиента. Мне нужна эта переменная, чтобы иметь возможность принимать Customer, Address, Employee ..... (любую вещь, которую я передаю). Как я могу это сделать?

public class CustomResponse {
    private Customer UserObject;
    private String Attributes;
    private String Tags;
    ....
}

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Вы можете реализовать интерфейсы на желаемых объектах и ​​вместо класса Customer использовать этот конкретный интерфейс в своих ответах:

public class CustomResponse {
    private ResponseObject responseObject;
    private String Attributes;
    private String Tags;
    ...
}

Тогда в вашем интерфейсе вы можете иметь сигнатуру для методов, которые вы должны иметь во всех классах, которые реализуют это:

public interface ResponseObject {
    ...
}

И тогда ваш Заказчик также является ResponseObject

public class Customer implements ResponseObject {
    ...
}
0 голосов
/ 29 апреля 2018

Для этого вы можете использовать универсальный класс:

public class CustomResponse<T> {
    private T userObject;
    private String Attributes;
    private String Tags;

    //a setter...
    public void setUserObject(T object) {this.userObject = object;}
    public T getUserObject() {return this.userObject;}
}

И конкретные типы объектов могут быть построены как:

CustomResponse<Customer> customerResponse = new CustomResponse<Customer>();
customerResponse.setUserObject(new Customer());
...

В другом методе ресурса:

CustomResponse<Address> customerResponse = new CustomResponse<Address>();
customerResponse.setUserObject(new Address());
...
...