当前位置: 首页 > 面试题库 >

为什么许多SWT控件都不允许子类化?

齐运诚
2023-03-14
问题内容

我经常发现自己想要这样做。当您要存储一些有用的信息或其他状态时,它可能非常有用。

所以我的问题是,是否有很好的理由来禁止这样做?

谢谢

编辑:非常感谢所有这些答案。因此,听起来这没有正确或错误的答案。

假设我接受这些类都不是子类的事实,那么 将Control类标记为final,而是禁止子类的意义是什么-有效地将异常/错误从编译时降级为运行时?

编辑^ 2:对此,请参阅我自己的回答:显然,这些类是可重写的,但是需要重写器进行显式确认。

谢谢


问题答案:

看起来似乎没有人在任何答案中都提到过这一点,但是SWT确实提供了一种可覆盖的checkSubclass()方法。正是在这里抛出了Unextendable异常。将方法重写为无操作,并有效地使扩展合法。我猜想让此选项保持打开状态最终是未将类设置为final且将扩展错误未设置为编译时而不是运行时的原因。

例:

@Override
protected void checkSubclass() {
    //  allow subclass
    System.out.println("info   : checking menu subclass");
}


 类似资料:
  • 问题内容: 我想理解为什么做出这个决定。通用异常有什么问题? (据我所知,泛型只是编译时的语法糖,Object无论如何它们都将转换为.class文件,因此有效地声明泛型类就好像其中的所有内容都是Object。。如果我错了,请更正我) 问题答案: 正如标记所说,类型是不可更改的,在以下情况下会出现问题: 两者和都被擦除为相同类型,JVM无法区分异常实例,因此也无法确定应执行哪个块。

  • 问题内容: 我看到以下错误: 使用此代码: 是什么原因引起的,如何解决? 问题答案: 在当前域之外发出ajax请求时,Javascript是受限制的。 例1:您的域名为example.com,并且您想向test.com提出请求=>您不能。 例2:您的域名是example.com,并且您想向inner.example.com发送请求,但是您不能。 例3:您的域名为example.com:80,并且您

  • 我正在阅读jls§5.1.7,它说有9种拳击类型,第9种是拳击 然后我读到的拆箱转换会抛出一个。好的,这很明显。那么为什么的装箱不会抛出一个以及装箱值有什么用呢?

  • 问题内容: W3指定表列(带有元素)仅允许使用四个CSS规则- 边框,背景,宽度和可见性。 有人知道这个决定的原因吗?如果可以使用边框和背景,为什么不使用字体和颜色呢? 问题答案: IanHixie在这里详细解释:为什么只有四个属性应用于表列的奥秘。相关报价: 文本的颜色取决于其元素的“颜色”属性。除非指定,否则“ color”属性(基本上)默认为“ inherit”,这意味着“采用父元素的值”。

  • 问题内容: 我读了这个问题,并认为如果可以写的话,很容易解决(不是没有它就不能解决): 我不确定在很多情况下它是否有用,但是我想知道为什么它没有用,以及其他语言中是否存在类似的东西。 你们有什么感想? 编辑: 澄清一下:是的,我知道,这在Java中是不可能的,我也不是很想念它。这不是我期望的工作,并且惊讶于出现编译器错误。我只是有这个主意,喜欢讨论它。 问题答案: 它违反了封装。你不应该能够绕过父

  • 其中map类型为,但我的测试在编译时失败: 为什么JUnit(或Hamcrest)不能确定使用哪个匹配器?