JAVA - как установить одинаковые поля разных классов - PullRequest
0 голосов
/ 29 мая 2018

У меня есть несколько классов моделей, и эти классы имеют два одинаковых поля: утверждено и проверено, оба имеют значение false.Я хочу создать одну конечную точку, чтобы установить для этих полей значение true независимо от типа объекта.Например, два класса моделей:

public class Meal extends Request {

private String id;
private Integer calories;
private LocalDateTime mealTime;
private Double fat;
private Double protein;
private Double carbon;
private Integer weight;
private List<MealElement> mealElements;
private MealStatus mealStatus;
private MealKind mealKind;
private List<Recipe> recipes;
private Boolean approved;
private Boolean checked;

public class Training extends Request {

private String id;
private String trainingName;
private Integer predictedCaloriesToBurn;
private Integer burnedCalories;
private LocalDateTime startTime;
private LocalDateTime endTime;
private List<Exercise> exerciseList;
private List<TrainingLabels> trainingLabels;
private Boolean approved;
private Boolean checked;
private ActivityDay activityDay;

Я создаю это с помощью AWS, поэтому мне нужно создать лямбду, чтобы сделать конечную точку для этого.Может кто-нибудь помочь мне с идеей, как это сделать?

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Возможно, интерфейс мог бы помочь?

public interface IdSupport {
    public void setId(String id);
    public String getId();
}

public class Meal extends Request implements IdSupport {
   ... 
}
public class Training extends Request implements IdSupport {
   ... 
} 
0 голосов
/ 29 мая 2018

Наследование

Общий класс должен предлагать интерфейс для этого.Как предлагать два метода сеттера.Он также должен содержать поля, поскольку они являются частью общего класса и не относятся к подклассам.

public class Request {
    private boolean approved;
    private boolean checked;

    public void setApproved(boolean approved) {
        this.approved = approved;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
    }

    public boolean isApproved() {
        return approved;
    }

    public boolean isChecked() {
        return checked;
    }
}

Ваша конечная точка может тогда просто сделать:

someRequest.setApproved(true);
someRequest.setChecked(true);

И это будет работать для каждого класса типа Request, включая ваши подклассы Meal и Training.


Интерфейсы

Еще лучше было бы, если бы выпереместите это в интерфейс, такой как InspectionItem:

public interface InspectionItem {
    void approve();
    void check();
    boolean isApproved();
    boolean isChecked();
}

И затем вы позволите общему классу реализовать следующее:

public class Request implements InspectionItem {
    private boolean approved;
    private boolean checked;

    @Override
    public void approve() {
        approved = true;
    }

    @Override
    public void check() {
        checked = true;
    }

    @Override
    public boolean isApproved() {
        return approved;
    }

    @Override
    public boolean isChecked() {
        return checked;
    }
}

Тогда ваша конечная точка будет работать на всемкоторый имеет тип InspectionItem, а не только Request s:

someItem.approve();
someItem.check();
0 голосов
/ 29 мая 2018

Хорошим подходом является использование одного или двух интерфейсов, как следует

public interface Checkable {
   setCheck(boolean ckeck);
} 

public interface Approvable {
   setApproved(boolean approved);
}

public class Meal extends Request implements Checkable, Approvable {
   ...
}

public class OtherClass implements Checkable, Approvable {
}



...



// And where you need to use it

public void setChecked(Checkable checkable, boolean value) {
   checkable.setCheck(value);
}

// Calling it as follow
Meal meal = ...
setChecked(meal, true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...