Menyiasat Punca java.lang.reflect.InvocationTargetException
Dalam refleksi Java, InvocationTargetException ditemui apabila cuba menggunakan kaedah melalui refleksi, menunjukkan pengecualian asas yang tidak disemak telah berlaku. Ini boleh berlaku walaupun kaedah dijangka membuang pengecualian khusus, seperti ArrayIndexOutOfBoundsException dalam sampel kod yang disediakan.
Penjelasan Kemungkinan
Apabila menggunakan refleksi, lapisan tambahan pengabstrakan diperkenalkan, yang membalut sebarang pengecualian yang dilemparkan oleh penyeruan kaedah sebenar dalam InvocationTargetException. Ini membolehkan untuk membezakan antara pengecualian yang berasal daripada panggilan refleksi itu sendiri (cth., argumen tidak sah) dan yang dijana dalam kaedah yang digunakan.
Membuka Pengecualian Dasar
Untuk mengakses pengecualian asal, seseorang boleh membuka balutan InvocationTargetException menggunakan kaedah getCause(). Ini akan mendedahkan pengecualian asas, yang kemudiannya boleh dikendalikan dengan sewajarnya.
Berikut ialah contoh:
<code class="java">try { m.invoke(testObject); } catch (InvocationTargetException ex) { Throwable cause = ex.getCause(); if (cause instanceof ArrayIndexOutOfBoundsException) { // Handle ArrayIndexOutOfBoundsException here } }</code>
Sebagai alternatif, seseorang boleh menggunakan printStackTrace() untuk memaparkan panggil timbunan dan kenal pasti bahagian "Disebabkan oleh:", yang akan memberikan maklumat tentang pengecualian asas.
Pendekatan Berhati-hati
Adalah penting untuk berhati-hati apabila menggunakan printStackTrace() dalam kod pengeluaran kerana ia berpotensi mendedahkan maklumat sensitif. Untuk tujuan pengelogan, adalah disyorkan untuk menggunakan kaedah getCause() dan mengendalikan pengecualian asas secara eksplisit.
Atas ialah kandungan terperinci Bagaimana untuk Mendedahkan Punca Tersembunyi Di Sebalik java.lang.reflect.InvocationTargetException?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!