public class Target extends javax.swing.JFrame {
private Attacker[] FieldIWant;
/* constructor and other stuff */
public static void main(String args[]){
new Target().setVisible(true);
}
}
Есть ли способ получить FieldIWant для гарантированно единственного работающего экземпляра Target от объекта атакующего? У меня есть полные имена классов для обоих.
Все остальные методы, которые я нашел, либо дают мне только объект класса вместо экземпляра, либо требуют вмешательства в командную строку для включения JDI.
У нашего класса есть финальный проект, в котором участвуют роботы с оружием, которые не видят друг друга. Наш учитель слегка поощрял «взломать» бегуна, а мое мелкое «я» хочет подарить своему роботу глаза.
То есть нет способа сделать это без инициализации объекта в отдельном классе?
В своем конструкторе вы можете назначить this полю. Обычно это плохая идея, но она часто встречается при создании графических интерфейсов.
Я не могу изменить код класса Target, хотя политики безопасности допускают отражение. Вы хотите сказать, что я могу получить доступ к Target из внешнего класса this?
Тогда ты ничего не сможешь сделать, Аарон Лю.
На самом деле, есть способ. Но чтобы распознать его, вам нужен глаз на детали.




Поскольку Target является подклассом javax.swing.JFrame. вы можете найти все его экземпляры в массиве, возвращаемом Frame.getFrames()
Если существуют другие экземпляры Frame или одного из его подклассов, вам придется перебрать массив и использовать instanceof для идентификации экземпляра Target.
Затем, чтобы получить доступ к полю private, вам придется использовать field = Target.class .getDeclaredField("FieldIWant"); и field.setAccessible(true);.
Видеть
Невозможно попросить систему: «Пожалуйста, дайте мне каждый экземпляр этого класса». Неважно, что вы знаете, что есть только один. Вам придется написать в своих собственных исходных файлах Java некоторый код, например. назначьте это статическому полю.