-
Bug
-
Resolution: Fixed
-
P4
-
8, 9
-
b144
-
generic
-
generic
-
Not verified
FULL PRODUCT VERSION :
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) Client VM (build 25.111-b14, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 6.1.7601]
EXTRA RELEVANT SYSTEM CONFIGURATION :
Not relevant.
A DESCRIPTION OF THE PROBLEM :
With specific Generics pattern, javac does not match method parameters although they do match and issues error:
error: method properties in class GenericClass<S,E> cannot be applied to given types;
required: String
found: String
reason: actual and formal argument lists differ in length
Minimal test case is provided to illustrate behavior.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile attached test case.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Compilation OK.
ACTUAL -
Compilation fails.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
error: method properties in class GenericClass<S,E> cannot be applied to given types;
HashMap<String, List<String>> map = gt.<String, List<String>>properties( "John" );
^
required: String
found: String
reason: actual and formal argument lists differ in length
where S,E are type-variables:
S extends Object declared in class GenericClass
E extends Object declared in class GenericClass
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.util.HashMap;
import java.util.List;
class GenericClass<S extends Object, E extends Object>
{
public <E2 extends Object> HashMap<S, ? extends List<E2>> properties( String key )
{
return null;
}
public static void main(String [] args)
{
GenericClass<String, Long> gt = new GenericClass<String, Long>();
HashMap<String, List<String>> map = gt.<String, List<String>>properties( "John" );
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
One workaround is to use raw class HashMap:
HashMap map = gt.properties( "John" );
but that approach triggers a compilation warning (we're in the process of getting rid of them). Furthermore, with raw class, downstream use/access to the map triggers more warnings.
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) Client VM (build 25.111-b14, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 6.1.7601]
EXTRA RELEVANT SYSTEM CONFIGURATION :
Not relevant.
A DESCRIPTION OF THE PROBLEM :
With specific Generics pattern, javac does not match method parameters although they do match and issues error:
error: method properties in class GenericClass<S,E> cannot be applied to given types;
required: String
found: String
reason: actual and formal argument lists differ in length
Minimal test case is provided to illustrate behavior.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile attached test case.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Compilation OK.
ACTUAL -
Compilation fails.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
error: method properties in class GenericClass<S,E> cannot be applied to given types;
HashMap<String, List<String>> map = gt.<String, List<String>>properties( "John" );
^
required: String
found: String
reason: actual and formal argument lists differ in length
where S,E are type-variables:
S extends Object declared in class GenericClass
E extends Object declared in class GenericClass
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.util.HashMap;
import java.util.List;
class GenericClass<S extends Object, E extends Object>
{
public <E2 extends Object> HashMap<S, ? extends List<E2>> properties( String key )
{
return null;
}
public static void main(String [] args)
{
GenericClass<String, Long> gt = new GenericClass<String, Long>();
HashMap<String, List<String>> map = gt.<String, List<String>>properties( "John" );
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
One workaround is to use raw class HashMap:
HashMap map = gt.properties( "John" );
but that approach triggers a compilation warning (we're in the process of getting rid of them). Furthermore, with raw class, downstream use/access to the map triggers more warnings.