[ 
https://issues.apache.org/jira/browse/DERBY-6885?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15255702#comment-15255702
 ] 

Bryan Pendleton commented on DERBY-6885:
----------------------------------------

Thanks for the cleanup. I desk-checked and proofread the code, and it all looks 
great.

+1

If you have a minute, perhaps you could elaborate on why, in this part of the 
change,
you were able to change the variable "success" from Boolean to boolean, but the
PrivilegedAction itself is still a PrivilegedAction<Boolean>? Is it because 
boolean is
a primitive, not a "true" type, while Boolean is a true type?

{code}
-        Boolean success = AccessController.doPrivileged(
-                new PrivilegedAction<Boolean>() {
-                    public Boolean run() {
-                        return ReuseFactory.getBoolean(FileUtil.copyFile(
-                                dataFactory.getStorageFactory(), from, to));
-                    }
-                });
-
-        if (!success.booleanValue()) {
+        PrivilegedAction<Boolean> pa = () ->
+                FileUtil.copyFile(dataFactory.getStorageFactory(), from, to);
+        boolean success = AccessController.doPrivileged(pa);
+        if (!success) {
{code}

I guess that the compiler is seeing an assignment
{code}
    boolean = Boolean
{code}
in the call to doPrivileged(), and is automatically generating a call to 
booleanValue()
to extract the boolean value from the Boolean object into the boolean primitive?

I suppose this is why we can't remove the "success" variable entirely, in favor 
of:

{code}
+        PrivilegedAction<Boolean> pa = () ->
+                FileUtil.copyFile(dataFactory.getStorageFactory(), from, to);
+        if (! AccessController.doPrivileged(pa) ) {
{code}

because a Boolean can't be simply tested like that in the "if" statement,
while a boolean can?

> Remove ReuseFactory
> -------------------
>
>                 Key: DERBY-6885
>                 URL: https://issues.apache.org/jira/browse/DERBY-6885
>             Project: Derby
>          Issue Type: Improvement
>          Components: Services
>    Affects Versions: 10.13.0.0
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>            Priority: Minor
>         Attachments: d6885.diff
>
>
> ReuseFactory used to help reduce object allocations when converting 
> numbers/booleans from primitive types to object types. After DERBY-2383 and 
> DERBY-6230, the ReuseFactory methods are just wrappers around standard 
> library methods such as Integer.valueOf() and Long.valueOf().
> Callers could just as easily call the corresponding valueOf() method 
> directly, or rely on auto-boxing. Both ways use the same cache as 
> ReuseFactory currently does, so ReuseFactory has no purpose anymore.
> One exception: ReuseFactory.getZeroLenByteArray() is still used and provides 
> value, as it avoids the allocation cost when an empty byte array is needed. 
> The ArrayUtil class is probably just as good a home for it, so I propose we 
> move it there and remove the ReuseFactory class.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to