RFR: 8314070: javax.print: Support IPP output-bin attribute extension [v7]
Phil Race
prr at openjdk.org
Sat May 11 18:19:05 UTC 2024
On Sat, 11 May 2024 17:37:08 GMT, Alexander Scherbatiy <alexsch at openjdk.org> wrote:
>> @AlexanderScherbatiy did you see the comment in the CSR about sealed classes ?
>> I had originally suggested in this PR (search for a comment from a while ago) and I don't know if you saw it there either.
>
> @prrace
>
> I have updated the fix to make the `OutputBin` class sealed and `CustomOutputBin` class final.
> The `OutputBin` class permits internal `sun.print.CustomOutputBin` class.
> The `OutputBin` javadoc that `Implementation- or site-defined names for an output bin kind attribute may also be created by defining a subclass of class {@code OutputBin}.` is removed.
> If it is an applicable change I will update the CSR as well.
> > @AlexanderScherbatiy did you see the comment in the CSR about sealed classes ?
> > I had originally suggested in this PR (search for a comment from a while ago) and I don't know if you saw it there either.
>
> @prrace There are two things which are not clear for me.
>
> The first one is that a user can extend `OutputBin` class and provide its own implementation. Should it be possible to the user provide output bins other than supported ones?
>
> The another question relates to `CustomOutputBin` class which is used to provide a list of supported output bins and which is not public. To make `OutputBin` class sealed it needs to add `CustomOutputBin` class to `OutputBin` class permits list:
>
> ```
> public sealed class OutputBin extends EnumSyntax implements PrintRequestAttribute, PrintJobAttribute
> permits sun.print.CustomOutputBin {
> }
>
> public final class CustomOutputBin extends OutputBin {
> }
> ```
>
> Is it good to use a non public class in the public class permits list?
>
> I made docs for the jdk with sealed `OutputBin` class. It has the `sealed` keyword in the javadoc but mentions nothing about internal `CustomOutputBin` class. `images/docs/api/java.desktop/javax/print/attribute/standard/OutputBin.html`:
>
> ```
> public sealed class OutputBin
> extends EnumSyntax
> implements PrintRequestAttribute, PrintJobAttribute
> ```
javadoc knows to not list the permitted class unless it is exported as public API, so it is fine.
"Users" should not need to to sub-class OutputBin, the JDK implementation will do this when it finds a printer. If we ever find a use-case that really demands it, the class can be unsealed.
"sealing" is like "final" in this regard. You can remove it, but typically you can't add it later.
I wish we'd had sealing 20 years ago ..
-------------
PR Comment: https://git.openjdk.org/jdk/pull/16166#issuecomment-2105980495
More information about the client-libs-dev
mailing list