julia_v_iluhina

Untitled

Oct 9th, 2016
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.96 KB | None | 0 0
  1. было
  2.     private final Map<String, String> status = new HashMap<String, String>() {{
  3.  
  4.         status.put("All", "");
  5.         status.put("Active", "false");
  6.         status.put("Completed", "true");
  7.     }};
  8.  
  9. стало
  10.     private final Map<String, String> status = new HashMap<String, String>() {
  11.         {
  12.             put("All", "");
  13.             put("Active", "false");
  14.             put("Completed", "true");
  15.         }
  16.     };
  17. /*
  18.     что исправлено - убрала status. в вызове метода put
  19.  
  20.     ну и форматирование поменяла немного - для ясности прежде всего
  21.  
  22.     теперь объяснения
  23.  
  24.     что мы делаем
  25.         мы делаем объект анонимного класса - потомка HashMap<String, String>
  26.         для которого в instance initialization block (блок с кодом {...}) - указываем -
  27.         что нужно сделать для инициализации такого объекта (3 вызова метода put)
  28.  
  29.     да, внутри объектов анонимного класса нам видимы все переменные, объявленные там же,
  30.     где и этот объект
  31.     т е переменная status - внутри объекта анонимного класса тоже видима
  32.  
  33.     но тут смотри - status - это тот же самый объект)
  34.     и мы как раз инициализируем этот объект (мы еще в процессе)
  35.     и при его инициализации - пытаемся оперировать переменной status -
  36.     как указывающей на такой объект
  37.     а это - еще не так - мы еще не закончили инициализацию, мы как раз ее делаем
  38.     и в этот момент status еще равен нуллу
  39.  
  40.     внутри любого объекта - методы этого же объекта можно вызывать без уточнения -
  41.     для какого объекта вызываем
  42.     т е
  43.         put("All", ""); - работаем с текущим объектом
  44.     это равносильно
  45.         this.put("All", "");
  46.  
  47.     анонимные классы
  48.         https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
  49.  
  50.     что такое instance initialization block
  51.         http://www.javamadesoeasy.com/2015/06/differences-between-instance.html
  52.  
  53.     что такое this
  54.       https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
  55.       http://stackoverflow.com/questions/2411270/when-should-i-use-this-in-a-class
  56.      
  57.     возможно - это пока сложным кажется
  58.     далее по курсу еще будем разговаривать про анонимные классы
  59.     можно пока отложить это
  60.     потом разберешься лучше
  61.      
  62.     сейчас - для начала - поменяй код - как я выше описала
  63.     ну и дальше - когда решишь уже существующие проблемки - от этого кода тоже избавимся
  64.     т к по сравнению с другими вариантами - он сложный
  65.     есть варианты понагляднее и попроще  
  66.    
  67.      
  68. */
  69. *****************************
  70. /*
  71.     когда это поправишь - получишь другую ошибку)
  72.  
  73.     странная команда собирается
  74.  
  75.     вот такая
  76.     Command = localStorage.setItem("todos-troopjs", "[{\"active\":false, \"title\":\"newA\"}]")false, \"title\":\"newB\"}]")false, \"title\":\"newC\"}]")
  77.  
  78.     чтоб ее увидеть - достаточно в методе given перед executeJavaScript
  79.  
  80.     вывести результирующую строку
  81.     System.out.println("Command = "+queryToExecute.toString());
  82.  
  83.     надо бы еще поразбираться с given )
  84.     советую сначала это решить, а потом - попробуй описанное ниже применить)
  85. */
  86. ***************************************
  87. /*
  88.     еще момент
  89.  
  90.     судя по реализации status - ты намерен оперировать тремя состояниями для таски
  91.     а у нас - 2 состояния у таски есть - активная и закомпличеная
  92.  
  93.     да и вариант сложноватый ты реализовал - с объектом анонимного класса
  94.  
  95.     я тут расскажу немного об enum
  96.     а ты подумай - как это применить )
  97. */
  98.  
  99. public enum Day {
  100.         MONDAY("понедельник"),
  101.         TUESDAY("вторник"),
  102.         WEDNESDAY("среда"),
  103.         THURSDAY("четверг"),//<<----------------------для каждого значения enum - вызов конструктора, фактически значение = объект класса
  104.         FRIDAY("пятница"),
  105.         SATURDAY("суббота"),
  106.         SUNDAY("воскресенье");
  107.  
  108.         String description;//<<---------------------------поле для хранения описания дня недели
  109.  
  110.         public Day(String description) {
  111.                 this.description = description;//<<---------------------------логика конструктора - запомнить для объекта его описание
  112.         }
  113.  
  114.         @Override
  115.         public String toString() {
  116.             return description;//<<---------------------------логика - вывести для объекта - то что для него заполнили
  117.         }
  118. }
  119.  
  120. /*
  121.  
  122.     все классы - потомки класса Object (enum - это тоже класс)
  123.     у Object есть метод toString()
  124.     который выполняет преобразование объекта к строке
  125.     реализовав такой метод в рамках класса SomeClass -
  126.     используя выражения типа "day is "+ Day.MONDAY
  127.     получишь строку "day is понедельник"
  128.  
  129.     toString() - можно грамотно использовать в рамках всех вспомогательных классов и enum-ов
  130.     это позволит упростить код
  131.  
  132.     конструкторы в enum-ах как раз и могут помочь решению задачи
  133.     для каждого значения enum вернуть свою строку
  134.  
  135.     попробуй применить эти подходы
  136.  
  137.     вот хороший пример
  138.     http://javarevisited.blogspot.com/2011/08/enum-in-java-example-tutorial.html
  139. */
Advertisement
Add Comment
Please, Sign In to add comment