Hi Martin,

Hmm. Sorry about that; I thought I was sending something which compiled, but clearly made a mistake somewhere in the tool chain.

It is possible at some cost to have a SerializableConditionImpl that had a Serializable field and a Condition field that both pointed to same object and forwarded methods calls appropriately. However, that adds an extra layer of objects and indirections.

-Joe

On 10/16/2019 6:11 PM, Martin Buchholz wrote:


On Wed, Oct 16, 2019 at 3:56 PM Joe Darcy <joe.da...@oracle.com <mailto:joe.da...@oracle.com>> wrote:


    FWIW, this code compiles in javac

         public interface SerializableCondition extends Condition,
    Serializable {
             public static <C extends Condition & Serializable>
                                      SerializableCondition transform(C
    condition) {
                 return condition;
             }
         }

    and objects of existing types like
    AbstractQueuedLongSynchronizer.ConditionObject seem to get
    "converted"
    as desired.


I actually tried this ...
---
import java.io.Serializable;
import java.util.concurrent.locks.Condition;

public interface SerializableCondition
    extends Condition, Serializable {
    public static <C extends Condition & Serializable>
      SerializableCondition transform(C condition) {
        return condition;
    }
}
---
... and got:

==> javac -source 14 -Xlint:all SerializableCondition.java
SerializableCondition.java:8: error: incompatible types: C cannot be converted to SerializableCondition
        return condition;
               ^
  where C is a type-variable:
    C extends Condition,Serializable declared in method <C>transform(C)
1 error

Reply via email to