Misleading error message when using diamond operator with private constructor
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Thu Aug 22 03:19:30 PDT 2013
On 22/08/13 11:09, Maurizio Cimadamore wrote:
> On 21/08/13 19:32, Eddie Aftandilian wrote:
>> Hi compiler-dev,
>>
>> I work with Jeremy on javac at Google. A user pointed out to us that
>> compiling code that uses the diamond operator and attempts to access
>> a private constructor fails with a misleading error message:
>>
>> Test.java:3: error: cannot infer type arguments for MyList<>
>> MyList<Object> foo = new MyList<>();
>> ^
>> 1 error
>>
>> The error is not that the types cannot be inferred, but that the
>> constructor for MyList is private. If you explicitly specify the
>> type parameter in the call to the MyList constructor, you get the
>> correct error message telling you that the constructor is private.
> Thanks for the report - it's true that error messages in diamond are
> suboptimal when the failure occurs for reasons other than inference.
> I'll file a bug on this one.
Filed bug no. 8023545
Thanks again
Maurizio
>
> Maurizio
>>
>> Steps to reproduce:
>>
>> I'm using javac version 1.7.0_25.
>>
>> 1) Create these 2 files.
>>
>> MyList.java:
>> public class MyList<E> {
>> private MyList() { }
>> }
>>
>> Test.java:
>> public class Test {
>> public void foo() {
>> MyList<Object> foo = new MyList<>();
>> }
>> }
>>
>> 2) Compile.
>>
>> $ javac Test.java
>> Test.java:3: error: cannot infer type arguments for MyList<>
>> MyList<Object> foo = new MyList<>();
>> ^
>> 1 error
>>
>> It would be great if javac produced a more helpful error message in
>> this case.
>>
>> Thanks,
>> Eddie
>
More information about the compiler-dev
mailing list