Почему выскакивает NullPointerException, если в функции stringToArray я инициализирую, передавая в качестве параметра SList
public class ListsS {
public ArrayList<String> SList;
public String str = "a a a";
private void stringToArray(String string, ArrayList<String> list, String separator){
list = new ArrayList<>(Arrays.asList(string.split(separator)));
}
public void a(){
stringToArray(str,SList," ");
}
public void end(){
for (String s : skillsList){
System.out.println(s);
}
}
Main
public class Main {
public static void main(String[] args) {
ListS lst = new ListS();
lst.a();
lst.end();
}
}
Вы не можете переписать значение для ссылки SList таким образом:
stringToArray(str,SList," ");
В java все параметры передаются по значению. Т.е. данный код создает копию ссылки. Эта ссылка указывает на null. В методе вы изменяете ее значение. После этого она указывает на созданный список, но исходная ссылка SList осталась неизмененной
Есть несколько вариантов решения:
1) возвращать из метода ссылку на новый список и присваивать ее значение SList
2) явно в методе обращаться к полю SList
3) Передавать объект содержащий ссылку на SList например
private void stringToArray(String string, ListsS obj, String separator){
obj.SList = new ArrayList<>(Arrays.asList(string.split(separator)));
}
Присвоение значения параметру list в stringToArray не меняет значение (null) члена класса SList.
private ArrayList<String> stringToArray(String string, String separator){
return new ArrayList<String>(Arrays.asList(string.split(separator)));
}
public void a(){
SList = stringToArray(str, " ");
}
ListS lst = new ListS();
вы создали новый объект с помощю конструктора по умолчанию. Все поля в нем ровно такие как описано в классе. Т.е. есть обе переменные и ArrayList и String как неинициализированные переменные типа указывают на объект null.
lst.a();
вы вызываете у этого объекта метод a(), который перепоручает работу другому методу, для работы которого требуется обе этих переменных. Обе они в этот момент указывают на null. Сплиттер не может работать с нулевой строкой. Поэтому выбрасывается исключение NullPointerException.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости