سؤال

تكرار ممكن: لماذا-جافا-لانج-فئة

أهلاً! أنا لا أفهم لماذا لا يمكن رميه ليس صفًا مجردًا. أرى حالة استخدام واحدة فقط لهذه: في أنظمة التسجيل لمعرفة التسلسل الهرمي للاتصال. ولكن يمكن أن يكون بعض الطريقة الثابتة لهذا الفئة أو غيرها. اذا لماذا؟)

شكرًا.

UPD

من java.util.logging.logrecord

// Get the stack trace.
StackTraceElement stack[] = (new Throwable()).getStackTrace();

لماذا لا يمكن أن يكون Throwable.getStackTrace(); أو كما في java.lang.thread

(new Exception()).getStackTrace();

بهذه الطريقة يمكننا تجنب throw new Throwable();

UPD2من جافادوك

فئة الرمي هي الطبقة الفائقة لجميع الأخطاء والاستثناءات في لغة جافا.

لذلك ، كطائحة فائقة يجب أن تكون مجردة ، IMHO. استخدامه للحصول على StackTrace ليس حالة جيدة من خلال هذا التعريف.

هل كانت مفيدة؟

المحلول

أنا لا أفهم لماذا لا يمكن رميه ليس صفًا مجردًا.

تم ذكر الجواب بوضوح هنا.

لماذا لا يمكن رميها. getStackTrace () ؛ أو كما في java.lang.thread

بكل بساطة ، getStackTrace() يدعو getOurStackTrace() الطريقة التي هي غير منتظمة. إذا getStackTrace() كان ثابتا ، وكذلك ينبغي getOurStackTrace(). هذا لن يحدث كما printStackTrace() الطريقة تستخدم getOurStackTrace(). تم وضع هذا في جافادوك:

يوفر الوصول البرمجي إلى معلومات تتبع المكدس المطبوعة بواسطة PrintStackTrace ().

مصدر Java.lang.Throwable:

 public StackTraceElement[] getStackTrace() {
        return (StackTraceElement[]) getOurStackTrace().clone();
    }

أيضا ، إذا قرأت رمز getOurStackTrace() الطريقة ، سترى أنها تستدعي الطريقة التالية:

private native int getStackTraceDepth();

بقدر ما أعرف، native لا يمكن أن يكون ثابتًا (قد أكون مخطئًا).

نصائح أخرى

أستخدمه في كثير من الأحيان لتسجيل الدخول ، لذلك أنا سعيد لأنه ليس مجردة. هناك طريقة للحصول على مكدس الاتصال ، Thread.currentThread ().

تعديل:

StackTraceElement[] stes = Thread.currentThread().getStackTrace();  

ملاحظة: تعمل هذه الطريقة أيضًا على الحصول على تتبع مكدس لخيط آخر يمكن أن يكون مفيدًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top