API REVIEW: RT-23888, Make PopupFeatures and PromptData final

Randahl Fink Isaksen randahl at rockit.dk
Fri Aug 31 06:22:55 PDT 2012


In your own private projects, adding final to a class is no risk, since you can change it the minute you realise that, after all, you needed to subclass.

In a general purpose and open source project with thousands of users and many different types of target applications, using final is a huge risk.

My project has been struggling with the improper use of final classes in JavaFX several times. We are developing a framework based on JavaFX, and being able to extend JavaFX classes is absolutely necessary, in order to add more features.

Take a look at these issues to see how previous mistakes have affected application and framework development for us (I am sure there are more issues if you do your own search):
http://javafx-jira.kenai.com/browse/RT-17331
http://javafx-jira.kenai.com/browse/RT-17078

To this day both Text and WebView are *still* declared final, and it has cost my project many hours of ugly work-around coding. 

I sincerely hope that no other classes are made final in this framework. It is an absolute disaster to third party framework development.

Randahl


On Aug 31, 2012, at 15:03 , Tom Eugelink <tbee at tbee.org> wrote:

> All I can say is that I hate final classes. "Not meant" does not mean "no one ever wants to".
> 
> What is the gain of making them final and what is the loss of not making them final?
> 
> Tom
> 
> 
> 
> On 2012-08-31 14:59, Peter Zhelezniakov wrote:
>> Hello,
>> 
>> There are two helper classes in javafx.scene.web package: PopupFeatures
>> and PromptData. They are not meant to be extended by developers, so I
>> hereby propose making them final, i.e.:
>> 
>> public final class PopupFeatures {
>>     public final boolean hasMenu();
>>     public final boolean hasStatus();
>>     public final boolean hasToolbar();
>>     public final boolean isResizable();
>> }
>> 
>> public final class PromptData {
>>     public PromptData(String message, String defaultValue);
>>     public final String getMessage();
>>     public final String getDefaultValue();
>> }
>> 
>> Thanks!
> 



More information about the openjfx-dev mailing list