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 некоторый код, например. назначьте это статическому полю.