我正在查看Property API并注意到ReadOnly属性实际上是Properties的子类。我认为一开始就没问题,因为一旦对象是ReadOnlyProperty
,它就无法重新获得Property
内部的方法。然而,事实并非如此,您可以轻松地进行类型转换以完全绕过只读部分。
public static void change(ReadOnlyIntegerProperty y)
{
if (y instanceof IntegerProperty)
{
IntegerProperty z = (IntegerProperty)y;
z.set(10);
}
}
这是设计意图吗?我认为ReadOnlyProperties更像是程序员的指南。但实际上并不意味着在JavaFX api中,某些属性是以ReadOnly的形式提供的,然后可以更改?例如:https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html
public final ReadOnlyObjectProperty<Scene> sceneProperty
我可以简单地将其转换为ObjectProperty<Scene>
,现在我可能会在库中导致未定义的行为。
我试图用另一种不支持它的语言来实现Property
。什么是防止这种情况发生的好方法?