clarification on docs of Class#getInterfaces() and Class#getGenericInterfaces() needed?
Jochen Theodorou
blackdrag at gmx.org
Mon Mar 10 15:10:02 UTC 2014
Hi,
hoping I will not annoy anyway asking this here I was wondering about
how to interpret the javadoc of these methods correctly.
You basically find this sentence for Class#getInterfaces() and
Class#getGenericInterfaces() "If this object represents a class, the
return value is an array containing objects representing all interfaces
implemented by the class."
The problem is that wording of "all". When I look at for example
AbstractList, then all means to me more than just List (which is what is
returned for AbstractList.class.getInterfaces()).
Furthermore, since the wording is so equal you would assume that
getInterfaces() and getGenericInterfaces() will always return the same
interfaces, in the same order, same length, only one generified, the
other not. But this is only true for classes produced by the java
compiler. getInterfaces seems to read what is produced from "implements
part" in bytecode, while getGenericinterfaces uses the signature. There
seems to be nothing forbidding a different order or even a different
number.
The example, that did bring me to this is
scala.runtime.AbstractPartialFunction from Scala 2.10.2 (other versions
I did not check). While the implements part says only PartialFunction,
the generics signature contains Function1 as well. Since PartialFunction
implements Function1 there should be no real problem with that, unless
you wrote code like me, that did depend on the two methods returning
more or less the same.
While much shorter the javadoc used in Android is for me much more
clear:
http://developer.android.com/reference/java/lang/Class.html#getInterfaces%28%29
"""
Returns an array of Class objects that match the interfaces in the
implements declaration of the class represented by this Class. The order
of the elements in the array is identical to the order in the original
class declaration. If the class does not implement any interfaces, an
empty array is returned.
"""
I won't say this will prevent the mistake I made, but at least it will
prevent the assumption *all* interfaces are to be shown here.
All in all I find it quite difficult to phrase this to not awake
assumptions like that, without especially mentioning it. But anyway...
should the javadoc be changed?
bye Jochen
More information about the core-libs-dev
mailing list