JAVA-如何设置不同类的相同字段

JAVA-如何设置不同类的相同字段,java,amazon-web-services,amazon-dynamodb,Java,Amazon Web Services,Amazon Dynamodb,我有几个模型类,这些类有两个相同的字段:approved和checked,都设置为false。我想创建一个端点,将此字段设置为true,而不管它是哪种类型的对象。例如,两个模型类: public class Meal extends Request { private String id; private Integer calories; private LocalDateTime mealTime; private Double fat; private Double protein; p

我有几个模型类,这些类有两个相同的字段:approved和checked,都设置为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;
公共类请求{
私有字符串id;
私人整数卡路里;
私人用餐时间;
私人双脂;
私有双蛋白;
私人双碳;
私有整数权重;
私人清单计量单位;
私人沼泽地;
私人密林密林密林密林密林密林密林密林密林密林密林密林密林密林密林密林密林密林密林密林密林密林密林密林密林密林密林密林;
私人菜谱;
私营机构获批准;
私有布尔检查;
公开课培训延长了要求{
私有字符串id;
私有字符串训练名;
私人整数预测热量消耗;
私人整数燃烧卡路里;
私有LocalDateTime开始时间;
私有LocalDateTime结束时间;
私人名单;
私人名单培训标签;
私营机构获批准;
私有布尔检查;
私人活动日活动日;

我是用AWS创建的,所以我必须创建lambda来创建端点。有人能帮我想一想怎么做吗?

一个好方法是使用一个或两个接口,如下所示

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);

也许一个界面能帮上忙

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 {
   ... 
} 
遗产 公共类应该为此提供一个接口。就像提供两个setter方法一样。它还应该包含字段,因为它们是公共类的一部分,而不是特定于子类

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
类型的每个类,包括您的子类
fine
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;
    }
}
然后,您的端点处理所有类型的
检查项
,而不仅仅是
请求
s:

someItem.approve();
someItem.check();

您使用
Boolean
而不是
Boolean
有什么原因吗?包装类的效率较低,占用的空间也比基元类型多。我认为要完成这项任务,我需要一个布尔类型的对象。如果要存储3个值,您只需要
Boolean
而不是
Boolean
false
null
。如果不需要,就不应该这样做。
Boolean
如前所述,比
Boolean
慢得多,因为它是一个对象,而不是原始数据类型。