问题 SimpleStringProperty和StringProperty之间的区别


我正在使用JavaFx TableView,发现有一些类使用TableView,例如SimpleStringProperty,StringProperty,SimpleBooleanProperty和BooleanProperty等。现在我想知道哪一个用于TableView的SimpleStringProperty或者只有StringProperty有什么区别?他们。


2664
2018-01-21 06:07


起源

问题清晰简洁,投票重新开放。 - jewelsea
是的,我正在网上寻找答案。 - Tomasz Mularczyk


答案:


StringProperty是可观察字符串属性的抽象基类,SimpleStringProperty是具体实现。

规则是:

  1. 在API中显示StringProperty
  2. 使用SimpleStringProperty作为代码中的具体实现

您有时会看到JavaFX代码本身从StringPropertyBase创建匿名内部类,其原因是它在记忆方面更有效,但您通常不必打扰自己。


15
2018-01-21 07:30



或者更具体: StringProperty是所有可写字符串属性的基类。 - eckig
@tomsontom如果我要使用SimpleStringProperty,为什么我不会在API和类定义中使用相同的东西? - simpleuser
这是API设计的第1课,面向对象仅提供API中所需的尽可能多的信息,这允许您在将来切换内部而不会破坏API的用户 - tomsontom
@tomsontom但是如果你然后改变API以便想要从StringProperty派生的东西(大概),现有用户就不会看到任何编译问题,因为SimpleStringProperty仍然可以存储在StringProperty以及新的派生类型中,然后就不会工作了正确。通过在API中指定SimpleStringPropery,如果您更改API,它会立即变得明显。 - simpleuser
@simpleuser“然后将无法正常工作”为什么? - Franklin Yu