StackTraceElement question
Krystal Mok
rednaxelafx at gmail.com
Mon Oct 8 11:33:38 UTC 2012
On Mon, Oct 8, 2012 at 7:27 AM, David Holmes <david.holmes at oracle.com>wrote:
> On Sat, Oct 6, 2012 at 3:04 AM, Christos Zoulas<christos at zoulas.com>
>> wrote:
>>
>> Hi,
>>>
>>> I don't know if this belongs to this list, but if it does not,
>>> please point me to where it does. I think that it would be nice if
>>> StackTraceElement which currently contains:
>>>
>>> boolean equals(Object obj)
>>> String getClassName()
>>> String getFileName()
>>> int getLineNumber()
>>> String getMethodName()
>>> int hashCode()
>>> boolean isNativeMethod()
>>> String toString()
>>>
>>> It would be more useful for it to also contain:
>>>
>>> Class<?> getClass()
>>>
>>> The reason I am asking, is because I have an application where I
>>> would like to find the enclosing class from where the exception is
>>> thrown not the superclass, but I cannot deduce that from the class
>>> name. If STE contained the above method, I could do:
>>>
>>> Class<?> c = ste.getClass();
>>> while (c.getEnclosingClass() != null) {
>>> c = c.getEnclosingClass();
>>> }
>>> return c.getName();
>>>
>>
> Can't you just do Class.forName(getClassName()) and then find the
> enclosing class?
>
> There could be potential class loader issues to
use Class.forName(getClassName()) in this case (most probably caused by
reflective calls).
But then again, giving the user a reference to instead of the name of a
class really gives the user more information then what's been given now
(e.g. class loader info). Which is not necessarily a good thing. I'd second
Alan on having to do more analysis.
- Kris
> David
> -----
>
>
> to find the class I want, and getClassName() could be just a wrapper:
>>>
>>> String getClassName() {
>>> return getClass().getName();
>>> }
>>>
>>> Is there any reason to store the name instead of the Class<?>? Is it
>>> possible to fix this in a future version of the jdk?
>>>
>>> thanks
>>>
>>> christos
>>>
>>>
More information about the core-libs-dev
mailing list