powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / getDeclaredField и setAccessible(true)
25 сообщений из 39, страница 1 из 2
getDeclaredField и setAccessible(true)
    #40049384
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!
Возник небольшой вопрос по доступу к приватным полям одного класса из другого класса.
По условию задачи нужно в классе B получить доступ к полю в классе A. Поле в классе A имеет модификатор доступа private.
Вопрос принципиальный , нужно именно пробить дыру только из класса B, без дополнительных методов обработчиков в классе A. (типа геттеров ,сеттеров,.. прочих методов)
Есть класс A:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public class A {
    private static ArrayList<String> animals = new ArrayList<String>();
    public A(){
        animals.add("Кошка");
        animals.add("Мышь");
        animals.add("кошкомышь");
    }
}


Как видно из него у нас есть в поле приватная переменная типа private static ArrayList<String> animals;

И есть класс B, в котором я хочу получить доступ к данному ArrayList в классе А.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public class B {
    public ArrayList<String> getAnimals() throws NoSuchFieldException {
        Field field = A.class.getDeclaredField("animals");
        field.setAccessible(true);
        ArrayList<String> arrayList = field.get(ЧЁ ТУТ ДОКРУТИТЬ,ИЛИ НЕ ТУТ?);
        return arrayList;
    }
}



Предполагаем по условию задачи, что на момент вызова метода getAnimals() из класса B, класс А уже инициализирован и список наполнен.
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049394
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html#get-java.lang.Object-If the underlying field is a static field, the obj argument is ignored; it may be null.
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049403
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan,

Та не, все и со статик работает. Вы не ту страницу хелпа посмотрели:)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class B {
    public ArrayList<String> getAnimals() throws NoSuchFieldException, IllegalAccessException {
        final var animals = A.class.getDeclaredField("animals");
        animals.setAccessible(true);
        return (ArrayList<String>) animals.get(null);
    }
 
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        System.out.println(new B().getAnimals());
    }
}
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049433
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Лалов, А где там написано, что со статик не работает?
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049436
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
offЯ фигею с этих преподов. Заставляет студентов свой мокито делать.
Зря мы закрыли топик про смерть ООП. Вот тут она - смертушка. Воооот тут.
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049438
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
offЯ фигею с этих преподов. Заставляет студентов свой мокито делать.
Зря мы закрыли топик про смерть ООП. Вот тут она - смертушка. Воооот тут.


Я периодически читаю топик здесь этот последний, где ООП умирает. Больше 40 страниц уже накатали.

Куда умирает то, стопэ, я только ворвался в Java, больше года чуть, нельзя умирать ООП.

Раньше писал в ФП стиле на другом языке, что вы там в ФП нашли уникального то?)
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049451
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
Если вас интересует ООП, то зачем в статическое поле добавляется кошка из конструктора экземпляра?
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049452
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049478
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Сергей Лалов
Если вас интересует ООП, то зачем в статическое поле добавляется кошка из конструктора экземпляра?


Да кто их кошек поймёт, они всегда ведь сами по себе. По всей видимости первый класс просто был чтобы показать какое то статическое хранилище, в вакууме. Которое не зависит от количества инстансов)
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049480
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
mayton
offЯ фигею с этих преподов. Заставляет студентов свой мокито делать.
Зря мы закрыли топик про смерть ООП. Вот тут она - смертушка. Воооот тут.


Я периодически читаю топик здесь этот последний, где ООП умирает. Больше 40 страниц уже накатали.

Куда умирает то, стопэ, я только ворвался в Java, больше года чуть, нельзя умирать ООП.

Раньше писал в ФП стиле на другом языке, что вы там в ФП нашли уникального то?)


Процедурный стиль != ФП, не надо путать. Функциональное программирование совсем о другом. И да, ООП умирает
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049485
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник

Процедурный стиль != ФП, не надо путать. Функциональное программирование совсем о другом. И да, ООП умирает


Вы имеете в виду использование к примеру рекурсий, которые ближе всего находятся к математическому отображении вычислении к примеру какой либо функции, к примеру ченить такое f(x)=Ai+f(x).
Думаю не путаю. Использую .
Но в стеке повседневных задач проще реализовать выполнение функции в императивном стиле, где под капотом работают тот же самый набор процедур. Более читаемо и лучше редактировать.

Это следующая стадия, когда люди поймут ,что и чистый ФП в общем то не нужен))
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049487
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,
Не умрёт. Как и Рсубд.
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049488
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
PetroNotC Sharp
Сергей Лалов
Если вас интересует ООП, то зачем в статическое поле добавляется кошка из конструктора экземпляра?


Да кто их кошек поймёт, они всегда ведь сами по себе. По всей видимости первый класс просто был чтобы показать какое то статическое хранилище, в вакууме. Которое не зависит от количества инстансов)
Ну по ООП пример не верен.
Поэтому чё его обсуждать на не верных исходных посылах.
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049493
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего - лаба по рефлексии. В обычной ООП разработке - если тебе нужен доступ к полям - то ты либо
открываешь доступ модификаторами pub/protect/priv либо делаешь по дизайну соотв. геттеры.
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049497
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Да. Поэтому слова ТС про ООП тут оффтоп. Лучше по теме пусть.
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049498
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
забыл ник,
Не умрёт. Как и Рсубд.

РСУБД не умрет, ну в ближайшей перспективе, хотя ниша уменьшится. А от ООП останется только название, по факту оно уже так и есть. Все эти SOLID, иммутабельность, anemic model - лишь попытки натянуть сову на глобус.
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049501
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
забыл ник

Процедурный стиль != ФП, не надо путать. Функциональное программирование совсем о другом. И да, ООП умирает


Вы имеете в виду использование к примеру рекурсий, которые ближе всего находятся к математическому отображении вычислении к примеру какой либо функции, к примеру ченить такое f(x)=Ai+f(x).
Думаю не путаю. Использую .
Но в стеке повседневных задач проще реализовать выполнение функции в императивном стиле, где под капотом работают тот же самый набор процедур. Более читаемо и лучше редактировать.

Это следующая стадия, когда люди поймут ,что и чистый ФП в общем то не нужен))

Тот случай когда много умных несвязанных по смыслу слов не делают фразу умнее в общем. ФП в первую очередь это перевод side-effectоф в управляемое русло, что приводит к лучшей композиции функций(когда то что делает функция определяется ее сигнатурой и если типы входа-выхода свопадают можно шлубоко не вникать в суть) и лучший local reasoning(когда для понимания куска системы достаточно знать входящие параметры и не нужно знать текущее состояние системы), эти два качества существенно уменьшают mental burden для девелопера, так что лучшая читаемость и редактируемость это прямо оксюморон. Не ну если речь о питоне или яваскрипте - то мб конечно...
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049507
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
PetroNotC Sharp
забыл ник,
Не умрёт. Как и Рсубд.

РСУБД не умрет, ну в ближайшей перспективе, хотя ниша уменьшится. А от ООП останется только название, по факту оно уже так и есть. Все эти SOLID, иммутабельность, anemic model - лишь попытки натянуть сову на глобус.

СтрашнО не само по себе ООП. Оно - суть воспитание правильного отношения к доменной модели.

А страшны его реализации в языках. Например чего стоит только поведение дефолтного конструктора в Java (его
отсутсвия вернее). Или чего стоит мультипарадигменность и ООП в С++. Вроде ООП есть - но лучшеб его и не было.
Хочется виртуальных функций? Ну - сделалибы как в JScript - зато сняли бы тяжелое бремя ООП. Был-бы прекрасный
необременённый ритуалами язык. А так - в технических спорах говорят что С++ - это ООП, но когда надо то
можно и его об колено сломать. Тоже самое с темой топика. Постулировано великими что приватное поле - недоступно
но хочется - то и рефлексия может его сломать. Зачем тогда оно вообще? Ребята зачем вам в ВАШЕМ коде ключевое
словов private? Вот какую оно пользу ВАМ принесло?

В новых языках, таких как Rust, GoLang, ООП - рудиментарно. Тоесть оно конечно есть - но уже не выглядит чем-то
обязательным и давлеющим. В одном из них даже keyword "class" отсуствует. В другом - не помню щас... вроде тоже нету.
Создатели Go - вообще следовали идее что если фича не очень нужна то ее вообще не стоит включать в язык. Тоесть
следовали минимализму. Сделан упор - на решение конкретной девопсовской или микро-сервисной задачи. А не на
следование высшим ритуалам ООП.
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049511
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Скорее всего - лаба по рефлексии. В обычной ООП разработке - если тебе нужен доступ к полям - то ты либо
открываешь доступ модификаторами pub/protect/priv либо делаешь по дизайну соотв. геттеры.


Да, это задачка по рефлексии)
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049512
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
mayton
Скорее всего - лаба по рефлексии. В обычной ООП разработке - если тебе нужен доступ к полям - то ты либо
открываешь доступ модификаторами pub/protect/priv либо делаешь по дизайну соотв. геттеры.


Да, это задачка по рефлексии)
мало относящаяся к жизни и практике.
Редко её юзают.
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049513
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ее в основном юзают фреймворки.
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049526
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попалась мне где-то такая история ...
Сдаёт новобранец упражнение по стрельбе короткими очередями. Новобранец, то ли разрядник, то ли мастер спорта по стрельбе, ставит автомат на одиночный огонь и классно поражает все мишени. Сержант кроет его матом: "Короткими очередями, ...", а новобранец, весь такой невозмутимый: "Зачем? Я и одиночными прекрасно попадаю".
Самое смешное, что запостил это сообщение тот самый новобранец, который даже отслужив в армии и, вроде как, повзрослев - продолжал обижаться на "тупого сержанта".

Есть у человека учебная задача. Решение должно продемонстрировать навык, который (не) получил программист, а не всё то, о чём тут "философируется".
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049527
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Скорее всего - лаба по рефлексии....

Лечение простуты через ж.... это теперь называется "лаба по рефлексии" ?

Т.к. "setAccessible(true)" и "доступ к приватным полям" это проктология. При чем тут ООП совершенно не понятно.

IMHO
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049536
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
mayton
Скорее всего - лаба по рефлексии....

Лечение простуты через ж.... это теперь называется "лаба по рефлексии" ?

Т.к. "setAccessible(true)" и "доступ к приватным полям" это проктология. При чем тут ООП совершенно не понятно.

IMHO


Не знаю, у меня тема топика вообще не касалась ООП, и более того задача уже решена в третьем письме

Видимо народу нужна новая трибуна для обсуждения топика" ООП умирает". Ну послушать интересно, не возражаю)

PS. Можно ещё подлить масла в огонь, и обсудить новую фишку объявления переменных через var:
Код: java
1.
var users = new ArrayList<User>();



Java уже практически бейсиком стал))
...
Рейтинг: 0 / 0
getDeclaredField и setAccessible(true)
    #40049537
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо выпить за правильные методики обучения. Побольше рефлексии.
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / getDeclaredField и setAccessible(true)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]