【问题标题】:How to force a class have one type of fields如何强制一个类具有一种类型的字段
【发布时间】:2013-12-01 13:01:14
【问题描述】:

我正在编写一个 java 代码。我有一个抽象类 A。任何用户都可以从A 扩展一个类 - 比如说B- 并且可以使用它。

我想要做的是强制用户只将String 类型添加到类B。为什么我想要这个是因为稍后我将动态获取和设置类B的字段,并且它们必须是字符串格式。

有什么办法可以做到这一点吗?

【问题讨论】:

    标签: java variables inheritance types


    【解决方案1】:

    不可能,您不能(在功能上)对未来的字段施加限制。您只需将其记录下来或一起修改您的方法。

    【讨论】:

      【解决方案2】:

      几乎做你想做的事情的唯一方法是要求该字段的 getter 和 setter。

      public abstract A {
        public String getField ();
        public void setField (String value);
      }
      

      【讨论】:

        【解决方案3】:

        首先,如前所述,通常您不想这样做,因此第一个建议是修改您的应用程序设计。

        从纯 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");
                    }
                }   
            }
        }
        

        要非常小心,牢记该方法的所有缺点并使用反射。

        【讨论】:

        • 感谢您的回复,我认为这是唯一的检查方法。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-21
        • 2016-12-13
        • 2021-08-18
        • 2016-09-04
        • 2012-12-03
        • 2019-12-06
        • 2018-12-31
        相关资源
        最近更新 更多