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