Java private list string

Java private list string

Как вы заметили, 2-й элемент массива scores изменяется вне сеттера (в строке 5). Поскольку геттер возвращает ссылку на scores, внешний код, имея эту ссылку, может вносить изменения в массив.

Решение этой проблемы заключается в том, что геттеру необходимо возвращать копию объекта, а не ссылку на оригинал. Модифицируем вышеупомянутый геттер следующим образом:

Переменные примитивных типов вы можете свободно передавать/возвращать прямо в сеттере/геттере, потому что Java автоматически копирует их значения. Таким образом, ошибок № 2 и № 3 можно избежать.

 private float amount; public void setAmount(float amount) < this.amount = amount; >public float getAmount()

String — это immutable-тип. Это означает, что после создания объекта этого типа, его значение нельзя изменить. Любые изменения будут приводить к созданию нового объекта String. Таким образом, как и для примитивных типов, вы можете безопасно реализовать геттер и сеттер для переменной String:

 private String address; public void setAddress(String address) < this.address = address; >public String getAddress()

Т.к. объекты класса java.util.Date являются изменяемыми, то внешние классы не должны иметь доступ к их оригиналам. Данный класс реализует метод clone() из класса Object, который возвращает копию объекта, но использовать его для этих целей не стоит.

По этому поводу Джошуа Блох пишет следующее: «Поскольку Date не является окончательным классом, нет га­рантии, что метод clone() возвратит объект, класс которого именно java.util.Date: он может вернуть экземпляр ненадежного подкласса, созданного специально для нанесения ущерба. Такой подкласс может, например, записы­вать ссылку на каждый экземпляр в момент создания последнего в закрытый статический список, а затем предоставить злоумышленнику доступ к этому списку. В результате злоумышленник получит полный контроль над всеми эк­земплярами копий. Чтобы предотвратить атаки такого рода, не используйте метод clone() для создания копии параметра, тип которого позволяет нена­дежным сторонам создавать подклассы».

Читайте также:  Charat and indexof in javascript

Источник

Не могу разобраться с инициализацией private static ArrayList strings.

1. Создай список строк.
2. Считай с клавиатуры 5 строк и добавь в список.
3. Используя цикл , найди самую длинную строку в списке.
4. Выведи найденную строку на экран. Если таких строк несколько, выведи каждую с новой строки.

Если есть несколько строк с длиной равной максимальной, то нужно вывести каждую из них с новой строки.

package com.javarush.task.task07.task0708; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; /* Самая длинная строка */ public class Solution < private static ArrayListstrings() throws IOException < ArrayListlist = new ArrayList<>(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); for (int i = 0; i < 5 ; i++) < String s = reader.readLine(); list.add(s); >return list; > private static void printer(ArrayList list) < for (int i = 0; i < list.size(); i++) < System.out.println(list.get(i)); if (list.get(i).length() >list.get(i + 1).length()) break; > > private static void bubbleSort(ArrayList list) < for (int i = 0; i < list.size() ; i++) < for (int j = 0; j < list.size() - 1 - i; j++) < if (list.get(j).length() < list.get(j + 1).length()) < String str = list.get(j); list.set(j, list.get(j + 1)); list.set(j + 1, str); >> > > public static void main(String[] args) throws Exception < ArrayListlist = strings(); bubbleSort(list); printer(list); > >

Источник

Оцените статью