Java 如何强制两个类具有相同的特定变量集,而无需继承和注释?

Java 如何强制两个类具有相同的特定变量集,而无需继承和注释?,java,Java,我有Product和ProductImage 我希望它们都有以下布尔值:toBeSynced,tobeaded和toBeDeleted 我如何使用OOP设计模式来实现这一点?我想到了接口,但这些都是用于meethods的。我不希望他们扩展一个Syncable类,因为它感觉不对。我不想手动将这些布尔值添加到这两个类中,我希望这些布尔值来自其他地方 编辑:我知道这可以通过注释来实现。如何工作?最好的方法是通过继承,使用抽象类定义公共属性 如果感觉不对,您的命名和/或设计可能不正确 abstract

我有
Product
ProductImage
我希望它们都有以下布尔值:
toBeSynced
tobeaded
toBeDeleted

我如何使用OOP设计模式来实现这一点?我想到了接口,但这些都是用于meethods的。我不希望他们扩展一个
Syncable
类,因为它感觉不对。我不想手动将这些布尔值添加到这两个类中,我希望这些布尔值来自其他地方


编辑:我知道这可以通过注释来实现。如何工作?

最好的方法是通过继承,使用抽象类定义公共属性

如果感觉不对,您的命名和/或设计可能不正确

abstract class Syncable {

    boolean toBeSynced;
    boolean toBeAdded;
    boolean toBeDeleted;

    abstract void sync();
    abstract void add();
    abstract void delete();
}
产品

class Product extends Syncable {
    // impl...
}
class ProductImage extends Syncable {
    // impl...
}
产品图像

class Product extends Syncable {
    // impl...
}
class ProductImage extends Syncable {
    // impl...
}
编辑:

您应该真正考虑类将要做什么,即is-a(继承)与has-a(组合)关系,例如:

产品
a
可同步
产品
是否有
同步
对象


就像你想象汽车一样,汽车是有轮子的,还是有轮子的?我认为不是;)

如果需要,您可以使用合成:

class Sync {
   boolean toBeSynced, toBeAdded ,toBeDeleted
}

class Product {
    Sync sync;
}

class ProductImage {
    Sync sync;
}

您可以使用组合来“混合”所需的值

public class Syncable
{
    // instance variables - replace the example below with your own
    private boolean toBeSynced;

   public void setToBeSynced(boolean toBeSynced){
       this.toBeSynced = toBeSynced;
    }

    public boolean getToBeSynced(){
        return this.toBeSynced;
    }
}
例如,我们可以有一个名为Syncable的类,它具有您想要的值

public class Syncable
{
    // instance variables - replace the example below with your own
    private boolean toBeSynced;

   public void setToBeSynced(boolean toBeSynced){
       this.toBeSynced = toBeSynced;
    }

    public boolean getToBeSynced(){
        return this.toBeSynced;
    }
}
然后,以产品类为例

public class Product
{
    Syncable sync;
    public Product()
    {
        sync = new Syncable();

    }

}
完成此操作后,可以根据需要修改布尔值

public static void main(String[] args){
        Product p = new Product();
        p.sync.setToBeSynced(false);
        System.out.println(p.sync.getToBeSynced());
}
当然,您可能希望在product类中添加另一层抽象,其中包含可以设置和获取所需布尔值的方法

public class Syncable
{
    // instance variables - replace the example below with your own
    private boolean toBeSynced;

   public void setToBeSynced(boolean toBeSynced){
       this.toBeSynced = toBeSynced;
    }

    public boolean getToBeSynced(){
        return this.toBeSynced;
    }
}
例如,您可以向product类添加以下2个方法:

public void setBoolean(boolean bool){
    this.sync.setToBeSynced(bool);
}

public boolean getBoolean(){
    return this.sync.getToBeSynced();
}
然后,在程序的另一部分中,您可以声明

Product p = new Product();
p.setBoolean(true);
boolean bool = p.getBoolean();

谢谢,如果我找不到别的办法,我会试试的。您知道我是否可以使用注释来实现这一点吗?当然可以,但是您需要编写注释处理代码。组合示例也是一个很好的示例