Ответы пользователя по тегу Программирование
  • В чем разница внедрения зависимостей по ссылке или по значению?

    EugeneP2
    @EugeneP2
    Java Dev
    value - для примитивов, стрингов, ${пропертей} и #{Spring Expression Language}.
    ref - если нужно заинжектить бин. В ref указывается id бина
    Ответ написан
    Комментировать
  • Для чего используется BindingResult в java?

    EugeneP2
    @EugeneP2
    Java Dev
    Из него мы можем узнать были ли ошибки валидации и какие при байденге http запроса на объект в контроллере

    Например, вот такой у нас контроллер
    @Controller
    public class SearchCommentController {
    
    	...................
    
    	@RequestMapping(method = RequestMethod.POST)
    	public String displayCommentAlert(@Validated FormParams params, BindingResult bindingResult, Model model) {
    		if (bindingResult.hasErrors() == false) {
    			List<CommentWithPeopleDetail> foundComments = commentDao.find(params);
    			model.addAttribute("foundComments", foundComments);
    		}
    		return "commentAlert";
    	}
    
    	...................
    }


    bindingResult инжектится спригом в метод контроллер

    вот валидатор
    public class SearchCommentParamValidator implements Validator {
    
    	@Override
    	public boolean supports(Class<?> clazz) {
    		return FormParams.class.isAssignableFrom(clazz);
    	}
    
    	@Override
    	public void validate(Object target, Errors errors) {
    
    		FormParams params = (FormParams) target;
    
    		if (StringUtils.isBlank(params.getRuleId()) && StringUtils.isBlank(params.getRef())) {
    			errors.reject(null, "Необходимо указать или 'ID правила', и/или 'Объект алерта'!");
    		} else if (params.getDateFrom() == null || params.getDateTo() == null) {
    			errors.reject(null, "Необходимо указать период поиска!");
    		}
    	}
    }
    Ответ написан
    Комментировать
  • Что собой представляет Java EE (Web) приложение?

    EugeneP2
    @EugeneP2
    Java Dev
    да, интернет банкинг, если он написан на джаве.

    В основном это внутрикорпоративные решение связанные с финансами, типа процессинг транзакций, документооборот, обработка заявок... Если хотите какие-то примеры, смотрите в сторону банков.

    Сервлеты, серверы приложений, сервлет контейнеры, JPA, JMS, база данных, очереди, транзакции, Spring, Hibernate - видите эти слова, это Java EE приложение:)

    Та просто, допустим интернет магазин, например будет сервер Tomcat (сервлет контейнер), скорее всего Spring, база данных + какая нибудь реализация JPA, скорее всего Hibernat. Или вместо реляционной БД, будет Mongodb. Вот это вам и будет Java EE
    Ответ написан
  • Java почему вылетает java.lang.NullPointerException?

    EugeneP2
    @EugeneP2
    Java Dev
    А массив кто создавать будет?

    int[] mass; - это ссылка на массив которая равна null, это означает, что любые обращения к ней, типа mass.length или mass[0] будут приводить NullPointerException. Вы пытаетесь узнать длину или получить доступ к нулевому элементу массива которого нет.

    this.mass[mass.length+1] = e; - это вы что пытаетесь сделать? Присвоить значение ячейки массива, которая находится за пределами размера массива.... получите еще одно исключение.

    Массив - структура фиксированной длины, т.е. уменьшать или увеличивать её размер нельзя, только заново пересоздавать и копировать элементы из старого в новый.

    Индекс массива может принимать значение от 0 до length - 1.

    В общем внимательно дочитайте всю главу о массивах...
    Ответ написан
    5 комментариев
  • Зачем и где именно писать @Override?

    EugeneP2
    @EugeneP2
    Java Dev
    Это аннотация пишется над методами, которые переопределяются из супер класса.

    Это что-то вроде страховки, гарантирующая что 100% переопределен метод.

    class A {
    public void superMethod() {}
    }
    
    class B extends A {
    @Override
    public void superMethod() {}
    }


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

    Если вдруг вы ошиблись в сигнатуре метода (например пропустили букву в название), то компилятор выдаст ошибку
    Ответ написан
    2 комментария
  • BufferedReader или Scanner?

    EugeneP2
    @EugeneP2
    Java Dev
    Судя из исходников, Scanner-е есть буферизация + много удобных методов для чтения текста. Но вам никто не мешает сделать вот так

    InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath), "UTF-8");
        BufferedReader br = new BufferedReader(isr);
    
    Scanner scanner = new Scanner(br);
    Ответ написан
    2 комментария
  • Одинаковые куски кода в разных классах допустимо или нубство?

    EugeneP2
    @EugeneP2
    Java Dev
    По поводу "switch (data.length)": тут нужно задействовать полиморфизм. Создать интерфейс с методом который принимает массив int[]data, и под каждый вариант case сделать соответствующую реализацию.

    Например
    interface Worker {
      void doWork(int[] data);
    }
    
    class Worker96 implements Worker  {
       public void doWork(int[] data) {
           ....
       }
    }
    
    class Worker71 implements Worker  {
       public void doWork(int[] data) {
           ....
       }
    }
    
    // потом можно создать мапу 
    
    class Main {
    
    private Map<Integer, Worker> workers = ....;
    
    Main (){
        workers.put(96, new Worker96());
        workers.put(71, new Worker71());
    }
    public void dataProcessing(int[] data) {
       Worker w = workers.get(data.length);
       if (w == null)
           throw new RuntimeException("Unsupported data length!");
    
       w.doWork(data);
    }
    }
    // как то так...


    По поводу первого случая, если код не предполагает хранение состояния,
    то можно вынести код в отдельный утильный класса в статический метод.
    Ответ написан
    4 комментария
  • Можно ли с jsp отправить List?

    EugeneP2
    @EugeneP2
    Java Dev
    Например есть такая форма
    <form ...>
    	<input name="lastName" value="Ivanov" />
    	<input name="firstName" value="Ivan" />
    
    	<input name="lastName" value="Petrov" />
    	<input name="firstName" value="Petr" />
    </form>


    В сервлете запрос от такой формы без фреймверков можно обработать вот так
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    	// тут будит lastNames = {"Ivanov", "Petrov"}
    	String[] lastNames = request.getParameterValues("lastName");
    
    	// тут будит firstNames = {"Ivan", "Petr"}
    	String[] firstNames = request.getParameterValues("firstName");
    
    	List<Author> author = new ArrayList<Author>();
    
    	for (int i = 0; i < lastNames.length && i < firstNames.length; i ++)  {
    	
    		author.add(new Author(firstNames[i], lastNames[i]));
    	}
    }


    как то так...
    Ответ написан
    Комментировать
  • Какие примеры правильного Java кода можно привести?

    EugeneP2
    @EugeneP2
    Java Dev
    Почему бы не начать с JDK? Качаем исходники и читаем на здоровье :)

    Вот кстати хороший список используемых паттернов ООП в JDK: Examples of GoF Design Patterns in Java's core lib...

    "директорий в путях (аля '\' или '/' )" - для этого есть константа separator в классе java.io.File

    Исходники: Spring Framework, Apache Commons, Guava и.д, в общем берете любую популярную либу и смотрите исходники:)

    Либы, исходники и документацию отлично качает maven с репозитория.
    Ответ написан
    Комментировать
  • Можно ли пропустить обучение Java EE если в будущем хочешь работать со Spring Framework?

    EugeneP2
    @EugeneP2
    Java Dev
    Servlet API, JMS и JPA понадобится
    Ответ написан
    Комментировать
  • Как разобраться с настройкой стиля программирования на Eclipse?

    EugeneP2
    @EugeneP2
    Java Dev
    Не совсем уверен насчет версии эклипс с++, но в случае версии для джавы, в настройках -> Java -> Code Style -> Formatter

    Создаете новый профайл и настраиваете форматирование как вам угодна, где какие переносы, где какие пробелы, табуляции. Там есть примеры того, как будет выглядеть код с теми или иными настройками.
    Ответ написан
  • Как устроены списки в Java?

    EugeneP2
    @EugeneP2
    Java Dev
    Метод deleteElement реализован не правильно. Операция '==' сравнивает ссылки на объекты, а не сами объекты.

    Например, если у вас в списке есть объект Node со значением поля data = 10, и вы хотите его удалить

    Node delNode = new Node();
    delNode.data = 10;

    deleteElement(delNode); // ничего не удалится

    потому что ссылка delNode и ссылка в списке ссылаются на разные объекты.
    В джаве для сравнения переопределяют метод equals, в котором реализуют сравнение полей класса.

    Вот так это должно выглядеть
    if (delNode.equals(head)) {
          head = head.next;
          return;
        } else {
          
          for (Node p = head; p != null; p = p.next) {
            if (delNode.equals(p.next)) {
              p.next = delNode.next;
            }		
          }


    Отличие структуры от класса в том, что класс позволяет реализовать наследование, инкапсуляцию и полиморфизм.
    Ответ написан
    7 комментариев
  • Изучаю java,загвоздка состоит в том,куда двигаться дальше?

    EugeneP2
    @EugeneP2
    Java Dev
    Учите английский язык. Работодатель может даже закрыть глаза на ваше плаванье в знаниях по java, если вы будите знать хорошо английский.
    Ответ написан
    6 комментариев