commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Shevek (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (LANG-819) EnumUtils.generateBitVector needs a "? extends"
Date Mon, 06 Jan 2014 03:28:51 GMT

    [ https://issues.apache.org/jira/browse/LANG-819?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13862742#comment-13862742
] 

Shevek commented on LANG-819:
-----------------------------

You misunderstand type bounds. Anyway, here is an example.

public class EnumTest {
    enum Foo {
        A, B, C;
    }

    public static void main(String[] args) {
        Set<? extends Foo> set = EnumSet.allOf(Foo.class);
        // set.add(Foo.B);  // Fails to compile: Set is typed read-only. See references above.
        EnumUtils.generateBitVector(Foo.class, set);    // Also fails to compile, even though
legitimate.
        generateBitVector(Foo.class, set); // Compiles fine, as method has correct type.
    }

    // Note method signature now has correct type for a method which only reads from the given
set.
    public static <E extends Enum<E>> long generateBitVector(Class<E> enumClass,
Iterable<? extends E> values) {
        long total = 0;
        for (E constant : values)
            total |= 1 << constant.ordinal();
        return total;
    }
}


> EnumUtils.generateBitVector needs a "? extends"
> -----------------------------------------------
>
>                 Key: LANG-819
>                 URL: https://issues.apache.org/jira/browse/LANG-819
>             Project: Commons Lang
>          Issue Type: Bug
>          Components: lang.*
>    Affects Versions: 3.0.1
>            Reporter: Shevek
>            Priority: Minor
>
>     public static <E extends Enum<E>> long generateBitVector(Class<E>
enumClass, Iterable<E> values) {
> Should be Iterable<? extends E>.
> This is because although no subclasses of E can exist, the "? extends" is a common idiom
for marking the collection as readonly, or not "owned" by the current object.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Mime
View raw message