According to pull request #1848, utility classes are noninstantiable, but abstract is not enough to prevent from creating objects by subclasses. This change modified almost all utility classes, but I do think it is necessary, and the effects should small and limited.

Comment From: snicoll

@scruel thanks for the PR but we'd rather keep things as they are.

Comment From: scruel

@scruel thanks for the PR but we'd rather keep things as they are.

Fine… but it must be a bad decision, and could you explain based on what reason so that you will not change this?

Comment From: snicoll

abstract is a fine enough signal for us. Yes you can instantiate public utils classes still but I don't think this is worth the extra noise.

Comment From: scruel

@snicoll Fine enough signal for you is not acceptable, could you consider that spring is using by so many people all around the world, no one can make sure that others will not treat abstract as a keyword as it is: you should extend this and create an object? By the way, the "extra noise" that you mentioned are already exists in this project, you could find some utils classes which have the private constructor(most of them does not have), and I do think abstract should be treated as the "noise", because we should not use it for preventing to instantiate the object. Also, I recommend you read Effective Java, item 4. Thanks.