> On Feb 12, 2022, at 10:16 PM, Srikanth Adayapalam 
> <srikanth.adayapa...@oracle.com> wrote:
> 
> I understand Frederic is asking about whether the spec​ inadvertently allows 
> something it should not - Here anyway is javac behavior:
> 
> Given:
> 
> abstract class A implements ValueObject {
>     int x;
> }
> 
> on compile:
> X.java:1: error: The type A attempts to implement the mutually incompatible 
> interfaces ValueObject and IdentityObject
> abstract class A implements ValueObject {
>          ^
> 1 error

Yep, this is expected and consistent: javac sees the field and infers the 
superinterface IdentityObject (per the language rules), then detects the 
conflict between interfaces.

A slightly more interesting variation: declare a simple interface Foo; change 
to 'A implements Foo'. This compiles fine, inferring A implements 
IdentityObject. Then separately compile Foo so that it extends ValueObject. No 
compilation error, but the JVM should detect the IdentityObject/ValueObject 
conflict when A is loaded.

To generate the kind of class files Fred asked about, you'd need to use 
something other than javac.

Reply via email to