StrLookup API confusing
-----------------------
Key: LANG-745
URL: https://issues.apache.org/jira/browse/LANG-745
Project: Commons Lang
Issue Type: Bug
Components: lang.*
Affects Versions: 3.0
Reporter: Etienne Neveu
[bayard: copying this from LANG-564]
I don't see the point of having a generic type parameter on the StrLookup
class, if it's not used anywhere. No method / field in StrLookup references
this type parameter. IntelliJ IDEA itself reports a warning: "Type parameter
'V' is never used". Moreover, Java generics are not reified, so there is no
reliable way to access the type parameter at runtime (and I don't see the point
of doing that anyway...).
While the Javadoc tries to clarify the purpose of a StrLookup, the unused type
parameter is still confusing, and the client code has to un-necessarily specify
type parameters. For example, I have to write:
StrLookup<?> lookup = StrLookup.noneLookup();
StrLookup<String> lookup2 = StrLookup.systemPropertiesLookup();
StrLookup<Integer> lookup3 = StrLookup.mapLookup(integerMap);
instead of
StrLookup lookup = StrLookup.noneLookup();
StrLookup lookup2 = StrLookup.systemPropertiesLookup();
StrLookup lookup3 = StrLookup.mapLookup(integerMap);
My best guess is that this type parameter was added when commons-lang was
generified, because StringLookup.mapLookup() takes a generified Map. Doing this
is not really needed, though: we could remove the <V> type parameter
everywhere, and replace the StrLookup.mapLookup()'s Map<String, V> with a
Map<String, ?> (which is the same as Map<String, ? extends Object>, but
shorter).
I guess it's too late to change this now, due to backward compatibility... But
I thought I'd comment just in case it's still possible.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira