Важная информация
Показано с 1 по 5 из 5

Тема: Сериализация объектов. Задача по созданию унифицированного сериализатора и десирализатора объектов.

  1. #1 Сериализация объектов. Задача по созданию унифицированного сериализатора и десирализатора объектов. 
    Новичок
    Регистрация
    30.06.2017
    Сообщений
    9
    Сказал(а) спасибо
    3
    Поблагодарили 0 раз(а) в 0 сообщениях
    Part B - replace with serializing objects
    Create an unified objects serializer and deserializer. The utility class gets object, serializes it and stores in Map and can recover objects from Map. Create Runner class which serialize objects which have annotation @Serializable, which has an argument “alias” for specifying serialized Object or field alias:
    Create a @Serializable annotation. The annotation is used to mark Classes and fields to be serialized by custom serializer. Attributes:
    alias - alias for object to store in serialized form.
    Create a Serializer - Deserializer class. Class should serialize and deserialize objects into map and back.

    Гугл- перевод:

    Часть B - заменить сериализованными объектами
    Создайте унифицированный сериализатор объектов и десериализатор. Класс utility получает объект, сериализует его и сохраняет в Map и может восстанавливать объекты с карты. Создайте класс Runner, который сериализует объекты с аннотацией @Serializable, который имеет аргумент «alias» для указания сериализованного псевдонима Object или field:
    Создайте аннотацию @Serializable. Аннотации используются для обозначения классов и полей, которые должны быть сериализованы с помощью специализированного сериализатора. Атрибуты:
    Псевдоним - псевдоним для хранения объекта в сериализованной форме.
    Создайте класс Serializer - Deserializer. Класс должен сериализовать и десериализовать объекты на карту и обратно.

    помогите решить задачу пожалуйста.
    Ответить с цитированием  
     

  2. #2  
    Разбирающийся
    Регистрация
    18.04.2014
    Адрес
    Ярославль
    Сообщений
    69
    Сказал(а) спасибо
    0
    Поблагодарили 65 раз(а) в 33 сообщениях
    Записей в блоге
    2
    Алгоритм прост:
    Создать аннотацию Serializable с возможностью указать alias(строка).
    Alias отвечает за то как поле, или объект будет называться в сериализованном виде
    С помощью reflection определяете какие поля подлежат сериализации(Те у которых указан атрибут Serializable).
    C помощью reflection вытаскиваем значения и alias поля и запихиваем в Map, alias как ключь, а значение как значение.
    Так же сохраняем инфомрации об alias и типу класса в map
    Для десериализации все делаем в обратном порядке.
    Находим в Map типа класса.
    Создаем экземпляр
    Присваиваем его полям соответствующие значения из map

    Единственное, что не понятно из задания, зачем нужен alias для класса. Я не нашел уме применения, возможно в задаче скрыта какая-то хитрость.
    Ответить с цитированием  
     

  3. 3 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (08.08.2017), Free Admin (03.08.2017), Potop (02.08.2017)

  4. #3  
    Новичок
    Регистрация
    30.06.2017
    Сообщений
    9
    Сказал(а) спасибо
    3
    Поблагодарили 0 раз(а) в 0 сообщениях
    сооздал класс персон и реализацию в раннере:
    Java Code:
    1.  
    2.  
    3. public class Person {
    4.  
    5. private int iD;
    6. private [Ссылки могут видеть только зарегистрированные пользователи. ] name;
    7. private [Ссылки могут видеть только зарегистрированные пользователи. ] secondName;
    8. private int age;
    9. private boolean male;
    10.  
    11. public Person(){};
    12. public Person(int iD, [Ссылки могут видеть только зарегистрированные пользователи. ] name, [Ссылки могут видеть только зарегистрированные пользователи. ] secondName, int age, boolean male){
    13. this.iD = iD;
    14. this.name = name;
    15. this.secondName = secondName;
    16. this.age = age;
    17. this.male = male;
    18. }
    19.  
    20.  
    21. public int getiD() {
    22. return iD;
    23. }
    24.  
    25. public void setiD(int iD) {
    26. this.iD = iD;
    27. }
    28.  
    29. public [Ссылки могут видеть только зарегистрированные пользователи. ] getName() {
    30. return name;
    31. }
    32.  
    33. public void setName([Ссылки могут видеть только зарегистрированные пользователи. ] name) {
    34. this.name = name;
    35. }
    36.  
    37. public [Ссылки могут видеть только зарегистрированные пользователи. ] getSecondName() {
    38. return secondName;
    39. }
    40.  
    41. public void setSecondName([Ссылки могут видеть только зарегистрированные пользователи. ] secondName) {
    42. this.secondName = secondName;
    43. }
    44.  
    45. public int getAge() {
    46. return age;
    47. }
    48.  
    49. public void setAge(int age) {
    50. this.age = age;
    51. }
    52.  
    53. public boolean isMale() {
    54. return male;
    55. }
    56.  
    57. public void setMale(boolean male) {
    58. this.male = male;
    59. }
    60.  
    61. @Override
    62.     public [Ссылки могут видеть только зарегистрированные пользователи. ] toString() {
    63.         return [Ссылки могут видеть только зарегистрированные пользователи. ].format("PersonClass{id='%d', name='%s', second name = '%s', age = '%d', male= '%b' }", iD, name, secondName, age, male);
    64.     }
    65.  
    66. }


    Java Code:
    1.  
    2.  
    3. import java.util.HashMap;
    4. import java.util.Map;
    5.  
    6. public class Runner {
    7.  
    8. public static void main([Ссылки могут видеть только зарегистрированные пользователи. ][] args) {
    9.  
    10. Person sasha = new Person(01, "Sahsa", "Ivanov",30,true);
    11. Person kolia = new Person(02, "Kolia", "Semenov",31,true);
    12. Person vika = new Person(03, "Vika", "Asina",29,false);
    13.  
    14. [Ссылки могут видеть только зарегистрированные пользователи. ] <[Ссылки могут видеть только зарегистрированные пользователи. ], Object> store = new HashMap<[Ссылки могут видеть только зарегистрированные пользователи. ],Object>();
    15.  
    16. store.put(sasha.getiD(), sasha);
    17. store.put(kolia.getiD(), kolia);
    18. store.put(vika.getiD(), vika);
    19. }
    20.  
    21. }


    Аннотация serialiseble будет использована для класса и полей. С возможностью использования reflection.

    Java Code:
    1.  
    2. package by.training.reflectionHomeTask.proxyPartB.annotations;
    3.  
    4. import java.lang.annotation.ElementType;
    5. import java.lang.annotation.Retention;
    6. import java.lang.annotation.RetentionPolicy;
    7. import java.lang.annotation.Target;
    8.  
    9. /**
    10.  * Annotation @Serializable, which has an argument "alias" for specifying
    11.  * serialized Object or field alias.
    12.  */
    13. @Target({ElementType.TYPE, ElementType.FIELD})
    14. @Retention(RetentionPolicy.RUNTIME)
    15. public @interface [Ссылки могут видеть только зарегистрированные пользователи. ] {
    16.     /**
    17.      * @return alias - alias for object to store in serialized form.
    18.      */
    19.     [Ссылки могут видеть только зарегистрированные пользователи. ] alias() default "";
    20. }


    помечаю класс и поля в классе персон аннотацией

    Java Code:
    1.  
    2. import by.training.reflectionHomeTask.proxyPartB.annotations.Serializable;
    3.  
    4. @[Ссылки могут видеть только зарегистрированные пользователи. ]
    5. public class Person {
    6.  
    7. @ [Ссылки могут видеть только зарегистрированные пользователи. ]
    8. private int iD;
    9. @ [Ссылки могут видеть только зарегистрированные пользователи. ]
    10. private [Ссылки могут видеть только зарегистрированные пользователи. ] name;
    11. @ [Ссылки могут видеть только зарегистрированные пользователи. ]
    12. private [Ссылки могут видеть только зарегистрированные пользователи. ] secondName;
    13. @ [Ссылки могут видеть только зарегистрированные пользователи. ]
    14. private int age;
    15. @ [Ссылки могут видеть только зарегистрированные пользователи. ]
    16. private boolean male;
    17.  
    18. public Person(){};
    19. public Person(int iD, [Ссылки могут видеть только зарегистрированные пользователи. ] name, [Ссылки могут видеть только зарегистрированные пользователи. ] secondName, int age, boolean male){
    20. this.iD = iD;
    21. this.name = name;
    22. this.secondName = secondName;
    23. this.age = age;
    24. this.male = male;
    25. }
    26.  
    27.  
    28. public int getiD() {
    29. return iD;
    30. }
    31.  
    32. public void setiD(int iD) {
    33. this.iD = iD;
    34. }
    35.  
    36. public [Ссылки могут видеть только зарегистрированные пользователи. ] getName() {
    37. return name;
    38. }
    39.  
    40. public void setName([Ссылки могут видеть только зарегистрированные пользователи. ] name) {
    41. this.name = name;
    42. }
    43.  
    44. public [Ссылки могут видеть только зарегистрированные пользователи. ] getSecondName() {
    45. return secondName;
    46. }
    47.  
    48. public void setSecondName([Ссылки могут видеть только зарегистрированные пользователи. ] secondName) {
    49. this.secondName = secondName;
    50. }
    51.  
    52. public int getAge() {
    53. return age;
    54. }
    55.  
    56. public void setAge(int age) {
    57. this.age = age;
    58. }
    59.  
    60. public boolean isMale() {
    61. return male;
    62. }
    63.  
    64. public void setMale(boolean male) {
    65. this.male = male;
    66. }
    67.  
    68. @Override
    69.     public [Ссылки могут видеть только зарегистрированные пользователи. ] toString() {
    70.         return [Ссылки могут видеть только зарегистрированные пользователи. ].format("PersonClass{id='%d', name='%s', second name = '%s', age = '%d', male= '%b' }", iD, name, secondName, age, male);
    71.     }
    72.  
    73. }


    В бине так же помечаю поле которое будет выступать ключом в мапе

    Java Code:
    1.  
    2. import by.training.reflectionHomeTask.proxyPartB.annotations.Serializable;
    3.  
    4. @[Ссылки могут видеть только зарегистрированные пользователи. ]
    5. public class Person {
    6.  
    7. @ [Ссылки могут видеть только зарегистрированные пользователи. ] (alias = "serialize")
    8. private int iD;
    9. @ [Ссылки могут видеть только зарегистрированные пользователи. ]
    10. private [Ссылки могут видеть только зарегистрированные пользователи. ] name;
    11. @ [Ссылки могут видеть только зарегистрированные пользователи. ]
    12. private [Ссылки могут видеть только зарегистрированные пользователи. ] secondName;
    13. @ [Ссылки могут видеть только зарегистрированные пользователи. ]
    14. private int age;
    15. @ [Ссылки могут видеть только зарегистрированные пользователи. ]
    16. private boolean male;
    17.  
    18. public Person(){};
    19. public Person(int iD, [Ссылки могут видеть только зарегистрированные пользователи. ] name, [Ссылки могут видеть только зарегистрированные пользователи. ] secondName, int age, boolean male){
    20. this.iD = iD;
    21. this.name = name;
    22. this.secondName = secondName;
    23. this.age = age;
    24. this.male = male;
    25. }
    26.  
    27.  
    28. public int getiD() {
    29. return iD;
    30. }
    31.  
    32. public void setiD(int iD) {
    33. this.iD = iD;
    34. }
    35.  
    36. public [Ссылки могут видеть только зарегистрированные пользователи. ] getName() {
    37. return name;
    38. }
    39.  
    40. public void setName([Ссылки могут видеть только зарегистрированные пользователи. ] name) {
    41. this.name = name;
    42. }
    43.  
    44. public [Ссылки могут видеть только зарегистрированные пользователи. ] getSecondName() {
    45. return secondName;
    46. }
    47.  
    48. public void setSecondName([Ссылки могут видеть только зарегистрированные пользователи. ] secondName) {
    49. this.secondName = secondName;
    50. }
    51.  
    52. public int getAge() {
    53. return age;
    54. }
    55.  
    56. public void setAge(int age) {
    57. this.age = age;
    58. }
    59.  
    60. public boolean isMale() {
    61. return male;
    62. }
    63.  
    64. public void setMale(boolean male) {
    65. this.male = male;
    66. }
    67.  
    68. @Override
    69.     public [Ссылки могут видеть только зарегистрированные пользователи. ] toString() {
    70.         return [Ссылки могут видеть только зарегистрированные пользователи. ].format("PersonClass{id='%d', name='%s', second name = '%s', age = '%d', male= '%b' }", iD, name, secondName, age, male);
    71.     }
    72.  
    73. }


    теперь нужно к этому бину нужно создать универсальный сериализатор?
    Последний раз редактировалось >Quiet Snow<; 02.08.2017 в 19:37. Причина: Пожалуйста пользуйтесь правкой! Не забивайте ленту активности сообщениями.
    Ответить с цитированием  
     

  5. #4  
    Разбирающийся
    Регистрация
    18.04.2014
    Адрес
    Ярославль
    Сообщений
    69
    Сказал(а) спасибо
    0
    Поблагодарили 65 раз(а) в 33 сообщениях
    Записей в блоге
    2
    Цитата Сообщение от Potop Посмотреть сообщение
    теперь нужно к этому бину нужно создать универсальный сериализатор?
    Получить поля класса [Ссылки могут видеть только зарегистрированные пользователи. ]
    Проверить наличие аннотации - [Ссылки могут видеть только зарегистрированные пользователи. ]
    Получить значения полей [Ссылки могут видеть только зарегистрированные пользователи. ]
    Записать его в Map
    Ответить с цитированием  
     

  6. 2 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (08.08.2017), Free Admin (03.08.2017)

  7. #5 Вот что получилось. 
    Новичок
    Регистрация
    30.06.2017
    Сообщений
    9
    Сказал(а) спасибо
    3
    Поблагодарили 0 раз(а) в 0 сообщениях
    Создал два bean класса так что бы можно было первый вкладывать во второй.

    класс персон
    Java Code:
    1.  
    2. package ReflectionPartB.etities;
    3.  
    4. import ReflectionPartB.annotation.Serializable;
    5.  
    6. @[Ссылки могут видеть только зарегистрированные пользователи. ]
    7. public class Person {
    8.  
    9. @ [Ссылки могут видеть только зарегистрированные пользователи. ] (alias = "serializeID")
    10. private int iD;
    11. @ [Ссылки могут видеть только зарегистрированные пользователи. ]
    12. private [Ссылки могут видеть только зарегистрированные пользователи. ] name;
    13. @ [Ссылки могут видеть только зарегистрированные пользователи. ]
    14. private [Ссылки могут видеть только зарегистрированные пользователи. ] secondName;
    15. @ [Ссылки могут видеть только зарегистрированные пользователи. ]
    16. private int age;
    17. @ [Ссылки могут видеть только зарегистрированные пользователи. ]
    18. private boolean male;
    19. @ [Ссылки могут видеть только зарегистрированные пользователи. ] (alias = "inSerializeObject")
    20. private Locations location;
    21.  
    22.  
    23. public Person(){};
    24. public Person(int iD, [Ссылки могут видеть только зарегистрированные пользователи. ] name, [Ссылки могут видеть только зарегистрированные пользователи. ] secondName, int age, boolean male, Locations location){
    25. this.iD = iD;
    26. this.name = name;
    27. this.secondName = secondName;
    28. this.age = age;
    29. this.male = male;
    30. this.location = location;
    31. }
    32.  
    33.  
    34. public int getiD() {
    35. return iD;
    36. }
    37.  
    38. public void setiD(int iD) {
    39. this.iD = iD;
    40. }
    41.  
    42. public [Ссылки могут видеть только зарегистрированные пользователи. ] getName() {
    43. return name;
    44. }
    45.  
    46. public void setName([Ссылки могут видеть только зарегистрированные пользователи. ] name) {
    47. this.name = name;
    48. }
    49.  
    50. public [Ссылки могут видеть только зарегистрированные пользователи. ] getSecondName() {
    51. return secondName;
    52. }
    53.  
    54. public void setSecondName([Ссылки могут видеть только зарегистрированные пользователи. ] secondName) {
    55. this.secondName = secondName;
    56. }
    57.  
    58. public int getAge() {
    59. return age;
    60. }
    61.  
    62. public void setAge(int age) {
    63. this.age = age;
    64. }
    65.  
    66. public boolean isMale() {
    67. return male;
    68. }
    69.  
    70. public void setMale(boolean male) {
    71. this.male = male;
    72. }
    73.  
    74. public Locations getLocation() {
    75. return location;
    76. }
    77. public void setLocation(Locations location) {
    78. this.location = location;
    79. }
    80. @Override
    81.     public [Ссылки могут видеть только зарегистрированные пользователи. ] toString() {
    82.         return [Ссылки могут видеть только зарегистрированные пользователи. ].format("PersonClass{id='%d', name='%s', second name = '%s', age = '%d', male= '%b', Location= '%s' }", iD, name, secondName, age, male,location);
    83.     }
    84.  
    85. }


    второй класс локейшн

    Java Code:
    1.  
    2. package ReflectionPartB.etities;
    3.  
    4.  
    5. import ReflectionPartB.annotation.Serializable;
    6.  
    7. @ [Ссылки могут видеть только зарегистрированные пользователи. ]
    8. public class Locations {
    9. @ [Ссылки могут видеть только зарегистрированные пользователи. ] (alias = "CITY")
    10. private [Ссылки могут видеть только зарегистрированные пользователи. ] city;
    11. private [Ссылки могут видеть только зарегистрированные пользователи. ] street;
    12. private int houseNumber;
    13. @[Ссылки могут видеть только зарегистрированные пользователи. ] (alias = "serialize")
    14. private Person person;
    15.  
    16. public Locations(){};
    17.  
    18. public Locations([Ссылки могут видеть только зарегистрированные пользователи. ] city){
    19. this.city = city;
    20.  
    21. }
    22.  
    23. public [Ссылки могут видеть только зарегистрированные пользователи. ] getCity() {
    24. return city;
    25. }
    26. public void setCity([Ссылки могут видеть только зарегистрированные пользователи. ] city) {
    27. this.city = city;
    28. }
    29. public [Ссылки могут видеть только зарегистрированные пользователи. ] getStreet() {
    30. return street;
    31. }
    32. public void setStreet([Ссылки могут видеть только зарегистрированные пользователи. ] street) {
    33. this.street = street;
    34. }
    35. public int getHouseNumber() {
    36. return houseNumber;
    37. }
    38. public void setHouseNumber(int houseNumber) {
    39. this.houseNumber = houseNumber;
    40. }
    41.  
    42. public Person getPerson() {
    43. return person;
    44. }
    45.  
    46. public void setPerson(Person person) {
    47. this.person = person;
    48. }
    49. @Override
    50.     public [Ссылки могут видеть только зарегистрированные пользователи. ] toString() {
    51.         return "Location{" +"city= " + city + "}";
    52.     }
    53.  
    54. }


    поля которые будут сериализованы помечаю своей созданной собственной аннотацией со свойством alias. Она используется для полей и классов.

    Java Code:
    1.  
    2. package ReflectionPartB.annotation;
    3.  
    4. import java.lang.annotation.ElementType;
    5. import java.lang.annotation.Retention;
    6. import java.lang.annotation.RetentionPolicy;
    7. import java.lang.annotation.Target;
    8.  
    9. import ReflectionPartB.constants.Constants;
    10.  
    11.  
    12.  
    13. /**
    14.  * Annotation @Serializable, which has an argument "alias" for specifying
    15.  * serialized Object or field alias.
    16.  */
    17. @Target({ElementType.TYPE, ElementType.FIELD})
    18. @Retention(RetentionPolicy.RUNTIME)
    19. public @interface [Ссылки могут видеть только зарегистрированные пользователи. ] {
    20.     /**
    21.      * @return alias - alias for object to store in serialized form.
    22.      */
    23.     [Ссылки могут видеть только зарегистрированные пользователи. ] alias() default Constants.DEFAULT_VALUE_B;
    24. }


    Класс Serialize имеет два метода для сериализации и десериализации.
    Сериализация происходит в инициализированную мапу source. При наличии вложенных объектов в сереализуемом объекте с помощью рекурсии метод сериализации вызывает сам себя.

    Java Code:
    1.  
    2. package ReflectionPartB.serializer;
    3.  
    4.  
    5.  
    6. import java.lang.annotation.Annotation;
    7. import java.lang.reflect.Field;
    8. import java.util.HashMap;
    9. import java.util.HashSet;
    10. import java.util.Map;
    11.  
    12. import ReflectionPartB.annotation.Serializable;
    13. import ReflectionPartB.constants.Constants;
    14.  
    15.  
    16.  
    17.  
    18.  
    19.  
    20. public class Serializer {
    21.     private HashSet<Object> serializedObjects = new HashSet<>();
    22.  
    23.     public Map<[Ссылки могут видеть только зарегистрированные пользователи. ], Object>  serialize([Ссылки могут видеть только зарегистрированные пользователи. ] obj) throws [Ссылки могут видеть только зарегистрированные пользователи. ] {
    24.       
    25.         {
    26.             Map<[Ссылки могут видеть только зарегистрированные пользователи. ], Object> source = new HashMap<>();
    27.             serializedObjects.add(obj);
    28.             if (obj.getClass().isAnnotationPresent([Ссылки могут видеть только зарегистрированные пользователи. ].class)) {
    29.                 for ([Ссылки могут видеть только зарегистрированные пользователи. ] field :
    30.                         obj.getClass().getDeclaredFields()) {
    31.           
    32.                     [Ссылки могут видеть только зарегистрированные пользователи. ] fieldAnnotation = field.getAnnotation([Ссылки могут видеть только зарегистрированные пользователи. ].class);
    33.                     
    34.                     if (fieldAnnotation != null) {
    35.                         [Ссылки могут видеть только зарегистрированные пользователи. ] alias = AnnotationPropsChecker.getProperty(fieldAnnotation, Constants.PROPERTY_NAME_B, Constants.DEFAULT_VALUE_B);
    36.                         [Ссылки могут видеть только зарегистрированные пользователи. ] fieldName = alias == null ? field.getName() : alias;
    37.                         field.setAccessible(true);
    38.                         [Ссылки могут видеть только зарегистрированные пользователи. ] value = field.get(obj);
    39.                         if (field.getClass().getAnnotation([Ссылки могут видеть только зарегистрированные пользователи. ].class) != null
    40.                                 && !serializedObjects.contains(value)) {
    41.                             value = serialize(value);
    42.                         }
    43.                         source.put(fieldName, value);
    44.                     }
    45.                 }
    46.             } else {
    47.                 throw new [Ссылки могут видеть только зарегистрированные пользователи. ]("wrong object");
    48.             }
    49.             return source;
    50.         }
    51.     }
    52.  
    53.     public [Ссылки могут видеть только зарегистрированные пользователи. ] deserialize(Map<[Ссылки могут видеть только зарегистрированные пользователи. ], Object> source, Class type) throws [Ссылки могут видеть только зарегистрированные пользователи. ], [Ссылки могут видеть только зарегистрированные пользователи. ] {
    54.         {
    55.             [Ссылки могут видеть только зарегистрированные пользователи. ] obj = type.newInstance();
    56.             serializedObjects.add(obj);
    57.             if (type.isAnnotationPresent([Ссылки могут видеть только зарегистрированные пользователи. ].class)) {
    58.                 for ([Ссылки могут видеть только зарегистрированные пользователи. ] field :
    59.                         obj.getClass().getDeclaredFields()) {
    60.                     [Ссылки могут видеть только зарегистрированные пользователи. ] fieldAnnotation = field.getAnnotation([Ссылки могут видеть только зарегистрированные пользователи. ].class);
    61.                     if (fieldAnnotation != null) {
    62.                         [Ссылки могут видеть только зарегистрированные пользователи. ] alias = AnnotationPropsChecker.getProperty(fieldAnnotation, Constants.PROPERTY_NAME_B, Constants.DEFAULT_VALUE_B);
    63.                         [Ссылки могут видеть только зарегистрированные пользователи. ] fieldName = alias == null ? field.getName() : alias;
    64.                         field.setAccessible(true);
    65.                         [Ссылки могут видеть только зарегистрированные пользователи. ] value = source.get(fieldName);
    66.                         if (field.getClass().getAnnotation([Ссылки могут видеть только зарегистрированные пользователи. ].class) != null
    67.                                 && !serializedObjects.contains(value)) {
    68.                             [Ссылки могут видеть только зарегистрированные пользователи. ] innerObject = field.getType().newInstance();
    69.                             deserialize(([Ссылки могут видеть только зарегистрированные пользователи. ]) value, field.getType());
    70.                             value = innerObject;
    71.                         }
    72.                         field.set(obj, value);
    73.                     }
    74.                 }
    75.             } else {
    76.                 throw new [Ссылки могут видеть только зарегистрированные пользователи. ]("wrong object");
    77.             }
    78.             return obj;
    79.         }
    80.     }
    81. }


    проверка наличия свойства аннотации alias у поля вынесена в отдельный класс с одним методом getProperty с параметрами (именем аннотации проверяемого поля field, именем проверяемого своства, значением установленным при отсутствии аннотации)

    Java Code:
    1.  
    2. package ReflectionPartB.serializer;
    3.  
    4. import java.lang.annotation.Annotation;
    5.  
    6. public class AnnotationPropsChecker {
    7.     public static [Ссылки могут видеть только зарегистрированные пользователи. ] getProperty([Ссылки могут видеть только зарегистрированные пользователи. ] annotation, [Ссылки могут видеть только зарегистрированные пользователи. ] propertyName, [Ссылки могут видеть только зарегистрированные пользователи. ] defaultParam) {
    8.     
    9.         [Ссылки могут видеть только зарегистрированные пользователи. ] annotationToString = annotation.toString();
    10.         
    11.         if (!annotationToString.contains(propertyName)) {
    12.             throw new [Ссылки могут видеть только зарегистрированные пользователи. ]("wrong property name");
    13.         }
    14.         if (annotationToString.contains(defaultParam.toString())) {
    15.             return null;
    16.         } else {
    17.             [Ссылки могут видеть только зарегистрированные пользователи. ] alias = annotationToString.split("[()=]")[2];
    18.             return alias;
    19.         }
    20.     }
    21. }


    в раннере создаем объекты location и затем person - указываем параметры, зам в объект location добавляем созданный объект класса Person и проводим сериализацию

    Java Code:
    1.  
    2. package ReflectionPartB.runner;
    3.  
    4. import java.util.Map;
    5.  
    6. import ReflectionPartB.etities.Locations;
    7. import ReflectionPartB.etities.Person;
    8. import ReflectionPartB.serializer.Serializer;
    9.  
    10.  
    11.  
    12.  
    13.  
    14.  
    15. public class RunnerSerializator {
    16.  
    17. public static void main([Ссылки могут видеть только зарегистрированные пользователи. ][] args) throws [Ссылки могут видеть только зарегистрированные пользователи. ], [Ссылки могут видеть только зарегистрированные пользователи. ] {
    18.  
    19. Locations location = new Locations("Gomel");
    20. Person sasha = new Person(1, "Sasha", "Ivanov",30,true,location);
    21. location.setPerson(sasha);
    22. [Ссылки могут видеть только зарегистрированные пользователи. ].out.println("Object before serializer: " + sasha);
    23. Map<[Ссылки могут видеть только зарегистрированные пользователи. ], Object> source = new Serializer().serialize(sasha);
    24. [Ссылки могут видеть только зарегистрированные пользователи. ].out.println("Source after serializer: " + source);
    25.  
    26. Person deserializeObject = new Person();
    27.         deserializeObject = (Person) new Serializer().deserialize(source, Person.class);
    28.         
    29.         [Ссылки могут видеть только зарегистрированные пользователи. ].out.println("Object after deserializer: " + deserializeObject);
    30.  
    31. }  
    32.  
    33. }


    результат работы сериализатора и десериализатора

    Java Code:
    1.  
    2. [Ссылки могут видеть только зарегистрированные пользователи. ] before serializer: PersonClass{id='1', name='Sasha', second name = 'Ivanov', age = '30', male= 'true', Location= 'Location{city= Gomel}' }
    3. Source after serializer: {serializeID=1, name=Sasha, inSerializeObject=Location{city= Gomel}, age=30, male=true, secondName=Ivanov}
    4. [Ссылки могут видеть только зарегистрированные пользователи. ] after deserializer: PersonClass{id='1', name='Sasha', second name = 'Ivanov', age = '30', male= 'true', Location= 'Location{city= Gomel}' }
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 13
    Последнее сообщение: 02.08.2017, 10:27
  2. Ответов: 0
    Последнее сообщение: 28.06.2017, 19:02
  3. Вопрос по созданию сети
    от Максим Баклаев в разделе Сети
    Ответов: 1
    Последнее сообщение: 27.05.2014, 01:23
  4. Предложение по созданию сайтов
    от Quad в разделе Изготовление сайтов и дизайн
    Ответов: 0
    Последнее сообщение: 18.02.2014, 13:29
  5. из файла в массив объектов
    от 123456789igor в разделе Java
    Ответов: 0
    Последнее сообщение: 23.03.2013, 20:40
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •