【发布时间】:2013-12-01 13:01:14
【问题描述】:
我正在编写一个 java 代码。我有一个抽象类 A。任何用户都可以从A 扩展一个类 - 比如说B- 并且可以使用它。
我想要做的是强制用户只将String 类型添加到类B。为什么我想要这个是因为稍后我将动态获取和设置类B的字段,并且它们必须是字符串格式。
有什么办法可以做到这一点吗?
【问题讨论】:
标签: java variables inheritance types
我正在编写一个 java 代码。我有一个抽象类 A。任何用户都可以从A 扩展一个类 - 比如说B- 并且可以使用它。
我想要做的是强制用户只将String 类型添加到类B。为什么我想要这个是因为稍后我将动态获取和设置类B的字段,并且它们必须是字符串格式。
有什么办法可以做到这一点吗?
【问题讨论】:
标签: java variables inheritance types
不可能,您不能(在功能上)对未来的字段施加限制。您只需将其记录下来或一起修改您的方法。
【讨论】:
几乎做你想做的事情的唯一方法是要求该字段的 getter 和 setter。
public abstract A {
public String getField ();
public void setField (String value);
}
【讨论】:
首先,如前所述,通常您不想这样做,因此第一个建议是修改您的应用程序设计。
从纯 Java 编码的角度来看,您可以在抽象类构造函数中使用反射来检查字段类型,因此如果您的类的用户不符合您的要求,您将永远不会运行代码
public abstract class A {
public A() {
for (Field field : this.getClass().getDeclaredFields()) {
if (field.getType() != String.class) {
throw new RuntimeException("only String type of fields are allowed");
}
}
}
}
要非常小心,牢记该方法的所有缺点并使用反射。
【讨论】: