You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2025/04/13 12:25:00 UTC
[jira] [Commented] (GROOVY-11615) Groovy has trouble type inferencing for Collections. The offender is Collections.asBlah set of methods. It needs the generic type to be added explicitly
[ https://issues.apache.org/jira/browse/GROOVY-11615?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17943916#comment-17943916 ]
Eric Milles commented on GROOVY-11615:
--------------------------------------
This works in Groovy 5 with the addition of "@TypeChecked" or "@CompileStatic". Can you test with that?
> Groovy has trouble type inferencing for Collections. The offender is Collections.asBlah set of methods. It needs the generic type <A.Y.X> to be added explicitly
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: GROOVY-11615
> URL: https://issues.apache.org/jira/browse/GROOVY-11615
> Project: Groovy
> Issue Type: Bug
> Components: Static Type Checker
> Affects Versions: 4.0.24
> Reporter: Saravanan
> Priority: Minor
>
> {code:java}
> public class Interfaces {
> public String myThing() {
> var myArray = Arrays.asList("123", "1354");
> var mySet = myArray.stream().collect(Collectors.toSet());
>
> // This call will fail
> // Failed to find class method 'getBytes(java.lang.Object)' or
> // instance method 'getBytes()' for the type: java.lang.String
> // To make it work change the previous line to
> // var mySet = myArray.stream().collect(Collectors.<String>toSet());
> mySet.forEach(String::getBytes);
> }
> }{code}
> Most Collectors.<methods> need a fully qualified type for the generic parameter, without which the compile will fail (sometimes detect an Object type instead of the right one)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)