【问题标题】:Define constraints on the context in which as class is instantiated在实例化 as 类的上下文中定义约束
【发布时间】:2023-12-22 07:44:01
【问题描述】:

我想知道是否有一种方法可以定义一个类,它的实例永远不会是另一个类的成员(只有局部变量),或者反过来——只有成员但永远不会是本地的。

有什么方法可以让一个类决定其预期实例的范围?

【问题讨论】:

  • 您为什么要这样做?比如说,我不能成为一名装饰师吗?

标签: java scope declaration


【解决方案1】:

我不这么认为。但我没有确凿的证据。

【讨论】:

    【解决方案2】:

    要限制范围,您需要某种类注释或类修饰符,并且虚拟机需要该功能来检查类(或此受限类的任何子类)是否分配给成员或局部变量并违反约束。

    想象一下,你有一个带有 - 刚刚发明的 - 'onlylocal' 修饰符的类,表明你只允许局部变量中的实例。

    public onlylocal class LocalUseOnlyClass implements Serializable {
      //...
    }
    

    在另一个类中,有人刚刚在构造函数中做了:

    private Object member;
    public MyOtherClass(Serializable something) {
      this.member = something
    }
    

    如果您将 LocalUseOnlyClass 的实例传递给该构造函数,编译器无法检测到,因此 JVM 必须检查并抛出异常或错误。

    顺便说一句 & OT:你的意图是什么? - 也许有替代方案可以满足您的基本要求。

    【讨论】:

      【解决方案3】:

      没有。成员和局部变量可以相互赋值。

      【讨论】:

        最近更新 更多