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