Решил получить доступ к приватному полю через рефлексию.
Как итог - ошибка NoSuchFieldException.
Перечитал документацию - все окей, в качестве параметра метод принимает simple name поля.
Посмотрел как это делают другие - вроде так же.
Если кто-то сможет подсказать, буду очень признателен.
Заранее спасибо!
P.S. вариант вложить MyUncaughtExceptionHandler в MyThread прошу не предлагать, хочу починить рефлексию.
package com.javarush.task.task25.task2505;
/*
Без дураков
*/
import java.lang.reflect.Field;
public class Solution {
public static void main(String[] args) {
MyThread myThread = new Solution().new MyThread("super secret key");
myThread.start();
}
public class MyThread extends Thread {
private String secretKey;
public MyThread(String secretKey) {
this.secretKey = secretKey;
setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
}
@Override
public void run() {
throw new NullPointerException("it's an example");
}
}
private static class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
public MyUncaughtExceptionHandler() {
}
@Override
public void uncaughtException(Thread t, Throwable e) {
try {
Field field = t.getClass().getField("secretKey");
field.setAccessible(true);
String str = (String) field.get(t);
System.out.printf("%s, %s, %s\n",str,t.getName(),e.toString());
} catch (NoSuchFieldException ex) {
System.out.println("NoSuch");
} catch (IllegalAccessException ex) {
System.out.println("Illegal");
}
}
}
}