Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / изменить значения private поля / 23 сообщений из 23, страница 1 из 1
24.03.2008, 13:10
    #35209513
I
I
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
кто-нибудь знает как изменить значения private поля ? и возможно ли это?

и как это делает hibernate

из примеров Хибернета
class C{
private Integer id;

private void setId(Integer id){..}
public Integer getId(){ return id}

}
...
Рейтинг: 0 / 0
24.03.2008, 13:23
    #35209561
caporegim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
почитайте про механизм reflection
...
Рейтинг: 0 / 0
24.03.2008, 13:27
    #35209572
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
Тынцы
1
2
...
Рейтинг: 0 / 0
24.03.2008, 13:28
    #35209574
qw123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
если это может делать reflection, тогда зачем нужно private?
...
Рейтинг: 0 / 0
24.03.2008, 13:31
    #35209583
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
qw123если это может делать reflection, тогда зачем нужно private?
security можно настроить так что setAccessible будет недоступен. И тогда поле нельзя будет заломать через рефлексию. Но вообще ограничение-то видимости больше для удобства девелоперов.
...
Рейтинг: 0 / 0
24.03.2008, 13:34
    #35209597
I
I
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
всем откликнувшимся спасибо, вопрос решён
...
Рейтинг: 0 / 0
24.03.2008, 13:56
    #35209685
qw123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
А для private static полей это действует?
...
Рейтинг: 0 / 0
24.03.2008, 14:00
    #35209697
qw123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
вопрос закрыт.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
03.03.2014, 13:15
    #38576768
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
У меня такой вопрос на счет инкапсуляции. Есть клас pryamougolnik с полями x,y// высота и ширина. И есть другой клас apps где создается обьект предыдущего класа pryamougolnik p= new pryamougolnik(); и там же определяются поля прямоугольника. p.x=a; p.y=b; тогда поля x,y в прямоугольнике могут быть pr4vate для обеспечение инкапсуляции или их надо определить как public для обеспечение доступа в другом класе?
...
Рейтинг: 0 / 0
03.03.2014, 13:27
    #38576786
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
stut,
Для новичков правило однозначное. Все изменяемые поля - приватные. Доступ через свойство - методы getX() и setX().
Для экспертов - могут быть нюансы, но надо всегда знать о последствиях.
...
Рейтинг: 0 / 0
03.03.2014, 14:04
    #38576840
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
Я так понял это задание, что там ишла речь об определение этих полей на прямую без конструкторов (в т.ч. по умолчанию), и гетеров и сетеров? Или так невозможно определить поля. Тогда не понятно если обьявить их приват-запрет доступа от чего он дает, от каких других класов и в каких условиях. Типа someclass.c=p.x?
...
Рейтинг: 0 / 0
03.03.2014, 14:04
    #38576841
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
Я так понял это задание, что там ишла речь об определение этих полей на прямую без конструкторов (в т.ч. по умолчанию), и гетеров и сетеров? Или так невозможно определить поля. Тогда не понятно если обьявить их приват-запрет доступа от чего он дает, от каких других класов и в каких условиях. Типа someclass.c=p.x?
...
Рейтинг: 0 / 0
03.03.2014, 14:15
    #38576862
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
Полагаю, русский язык для вас не родной. Понять ваши вопросы не просто.
stutЯ так понял это задание
Какое задание?

stut, что там ишла речь об определение этих полей на прямую без конструкторов (в т.ч. по умолчанию), и гетеров и сетеров?
Возможно. Я пока задания не видел.

stutИли так невозможно определить поля.
Возможно.

stut Тогда не понятно если обьявить их приват-запрет доступа от чего он дает
Это даёт свойства, которые в отличие от полей являются виртуальными и можно использовать полиморфизм в полный рост.

stut , от каких других класов и в каких условиях. Типа someclass.c=p.x?
Тут я совсем потерялся. Постарайсте сформулировать иначе.
...
Рейтинг: 0 / 0
03.03.2014, 16:23
    #38577025
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
Да насчет русского уже написано не один раз. Задание вкратце я выложыл вначале. Хотя оно состояло в том чтобы поменять уже существующий код. Может надо было как раз и методы использовать для установления. Кроме того там эти поля были определены как публик. И надо было обеспечить инкапсуляцию. То есть единый логический вариант изменить на приват модификатор. Но тогда возникает вопрос в чем тогда отличие между полями приват и публик? Если возможно определить таким способом поля обьекта, то это возможно когда поля есть приватными?
...
Рейтинг: 0 / 0
03.03.2014, 16:29
    #38577035
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
stutДа насчет русского уже написано не один раз.
Прошу прощения, но я всех не запоминаю. Заполнили бы в профиле поле "Откуда" и вопросов бы не возникало.
С анлийским как?

stutЗадание вкратце я выложыл вначале.
Оно там в перемешку с вашими мыслями, поэтому где задание не очевидно. Да и трактовка вашего задания может радикально отличаться от самого заданеия.

stutХотя оно состояло в том чтобы поменять уже существующий код. Может надо было как раз и методы использовать для установления. Кроме того там эти поля были определены как публик. И надо было обеспечить инкапсуляцию. То есть единый логический вариант изменить на приват модификатор. Но тогда возникает вопрос в чем тогда отличие между полями приват и публик? Если возможно определить таким способом поля обьекта, то это возможно когда поля есть приватными?
Я ничего не понял. "Возмжно ли это. А возможно ли вон то".
Поля - состояние объекта.
Публичные поля выставляют состояние объекта кому-попало на пользование.
Приватные поля скрывают состояние объекта внутри самого объекта что и есть инкапсуляция.
...
Рейтинг: 0 / 0
03.03.2014, 17:26
    #38577088
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
Blazkowicz, Blazkowicz, да такую теорию я уже сто раз слышал. А вот практика особенно надобность все этого вызывало с меня вопросы. Что значит кому попало. Можно подумать что там вот прям руками берут если есть паблик. Ну определили мы эти поля как приват к чему склоняет задание ибо изначально они паблик. А во втором кларе они определяюся или изменятся. Где там инкапсуляция. Или она определяется в том что эти поля определяются после создание обькта то есть как бы внутри первого класа обьект которого помещен в ином класе. Знаю что поля можно в первую очередь через конструктор определять который всегда паблик. Или здесь дело в том что правая часть то есть то что присваеватся надо определять модиф. доступа, а левая часть вне действия этого так как ей это присваевается.
...
Рейтинг: 0 / 0
03.03.2014, 17:26
    #38577089
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
Blazkowicz, Blazkowicz, да такую теорию я уже сто раз слышал. А вот практика особенно надобность все этого вызывало с меня вопросы. Что значит кому попало. Можно подумать что там вот прям руками берут если есть паблик. Ну определили мы эти поля как приват к чему склоняет задание ибо изначально они паблик. А во втором кларе они определяюся или изменятся. Где там инкапсуляция. Или она определяется в том что эти поля определяются после создание обькта то есть как бы внутри первого класа обьект которого помещен в ином класе. Знаю что поля можно в первую очередь через конструктор определять который всегда паблик. Или здесь дело в том что правая часть то есть то что присваеватся надо определять модиф. доступа, а левая часть вне действия этого так как ей это присваевается.
...
Рейтинг: 0 / 0
03.03.2014, 17:43
    #38577105
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
stutBlazkowicz, Blazkowicz, да такую теорию я уже сто раз слышал.
И всё никак не можете в неё поверить?

stutА вот практика особенно надобность все этого вызывало с меня вопросы. Что значит кому попало.
public поле обозначает, что любой другой класс может читать\писать значение данного класса и стать зависимым от внутренного состояния класса. В примитивных случаях для классов типа Rectangle это не страшно. Но новички не могут правильно отличить в каких случаях можно использовать публчиные поля. Поэтому им лучше всего использовать приватные поля и свойства.

stutМожно подумать что там вот прям руками берут если есть паблик.

Безопасный код, тяжело сломать. Нарушение инкапсуляции делает код более уязвимым, потому что увеличивает зависимость между классами. Предстваляете, вы написали чисто для себя класс с публичными полями, а ваш коллега начал их использовать и не догадался, что этого делать не стоило.

stutНу определили мы эти поля как приват к чему склоняет задание ибо изначально они паблик.

Задания мы пока что не видели.

stutА во втором кларе они определяюся или изменятся. Где там инкапсуляция.

"Второй клар" общается с первым через методы, которые первый предоставляет. Тем самым скрывая от "второго клара" своё внутреннее состояние и структуру. Понять на примитивных примерах это решительно не возможно. Вероятно в этом ваше затруднение.

stut Или она определяется в том что эти поля определяются после создание обькта то есть как бы внутри первого класа обьект которого помещен в ином класе.
Процесс создания объекта не так важен.

stutЗнаю что поля можно в первую очередь через конструктор определять который всегда паблик.

Конструктор не всегда паблик.
Не знаю что такое "определять поля".
Поля можно объявлять. Можно задавать им значение. Можно это значени читать.

stutИли здесь дело в том что правая часть то есть то что присваеватся надо определять модиф. доступа, а левая часть вне действия этого так как ей это присваевается.

Тяжело ориентироваться в коде, который только у вас в голове.
...
Рейтинг: 0 / 0
04.03.2014, 00:26
    #38577344
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
У меня еще есть иной хотя похожый вопрос. В ином задание мне надо было определить свойства полей. Я вообще такое в яве в первый раз увидел. Потом посмотрел в англоязычный интернет так там идет речь что имеется ввиду setter- и getter-методы. Действительно ли это так и как в этих проперти использовать исключительные ситуации. Например возраст. Если выходит за пределы то throw exception, a где определять эти исключительные ситуации и в каком виде?
...
Рейтинг: 0 / 0
04.03.2014, 11:17
    #38577512
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
stutУ меня еще есть иной хотя похожый вопрос. В ином задание мне надо было определить свойства полей. Я вообще такое в яве в первый раз увидел. Потом посмотрел в англоязычный интернет так там идет речь что имеется ввиду setter- и getter-методы. Действительно ли это так ...
Да. Всё верно. Я вам про свойства и акцессоры с самого начала пишу. А вы игнорируете.

stutи как в этих проперти использовать исключительные ситуации. Например возраст. Если выходит за пределы то throw exception, a где определять эти исключительные ситуации и в каком виде?
Есть много разных способов. Тут однозначного ответа нет.
1) Прямо в setter-е

Код: java
1.
2.
3.
4.
5.
public void setAge(int age){
   if(age < 0) throw new IllegalStateException("Negative age");

   this.age = age;
}



2) С использованием фреймверков
(Oval ( http://oval.sourceforge.net/) или Bean Validation ( http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html))


Код: java
1.
2.
3.
4.
@Min(0)
public void setAge(int age){
     this.age = age;
}



3) С использование отдельного слоя валидации, этот вариант, возможно будет хорошим в UI, где пользователю можно вводить что угодно. Но с другой стороны он и не самый безопасный, так как позволяет иметь не валидное состояние.

Код: java
1.
2.
person.setAge(newAge);
validator.validate(person); //Выкидывает исключение
...
Рейтинг: 0 / 0
06.03.2014, 07:28
    #38579678
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
Ну все таки надо вам сразу было написать что присвоение напряму полей обьекта одного класа в рамках второго класа при приватных полях вызовет ошибку компиляции. Хотя это надо было мне проверить на компиляторе, что я и зделал. Хотя создание обьекта надо делать в методе мейн второго класа ибо без него присвоение и даже систем.аут.принт-вызывает ошибку <identifier> expected. То есть выходит что без метода мейн присвоение и не только не произойдет? Только не понимаю как в класе прямоугольник обеспечить инкапсуляцию если поля есть паблик, приват в таком случае вызовет ошибку? Чтоли протектед, но тогда это не будет вполне инкапсуляция да и наследование придется применять.
...
Рейтинг: 0 / 0
06.03.2014, 11:14
    #38579863
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
stutНу все таки надо вам сразу было написать что присвоение напряму полей обьекта одного класа в рамках второго класа при приватных полях вызовет ошибку компиляции.
То есть это теперь моя вина в том что вы отказываетесь читать документацию? Увидели незнакомое слово - ищите его описание в документации.

stutХотя это надо было мне проверить на компиляторе, что я и зделал.

javac.exe - это компилятор.
А то что вы "зделали", скорее всего, просто код на Java.

stutХотя создание обьекта надо делать в методе мейн второго класа ибо без него присвоение и даже систем.аут.принт-вызывает ошибку <identifier> expected. То есть выходит что без метода мейн присвоение и не только не произойдет?

Вы свой код видите, а я ваш - нет. Удачи в объяснениях на пальцах.

stut Только не понимаю как в класе прямоугольник обеспечить инкапсуляцию если поля есть паблик, приват в таком случае вызовет ошибку?
В других классах нужно использовать не поля прямоугольника, а только его методы.

stutЧтоли протектед, но тогда это не будет вполне инкапсуляция да и наследование придется применять.
facepalm
...
Рейтинг: 0 / 0
08.03.2014, 02:26
    #38581692
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменить значения private поля
То есть идентификатор эйспектед значит что надо обязательно включить метод (мейн, например).// еще вопрос чтобы не создавать новую тему-где найти примеры кода который создают джуниоры и интермедиат девелоперы?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / изменить значения private поля / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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