Как я создаю разнородный массив в Scala?

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
28
задан Mark Rajcok 4 November 2016 в 18:04
поделиться

3 ответа

Массивы в Scala очень однородны. Это потому, что Scala является статически типизированным языком. Если вам действительно нужны псевдогетерогенные функции, вам нужно использовать неизменяемую структуру данных, которая параметризована ковариантно (большинство неизменных структур данных есть). List является каноническим примером там, но Vector также вариант. Затем вы можете сделать что-то вроде этого:

Vector("a string", 10, Map("x" -> 1), ()=>()) + "another value"

Результат будет типа Vector[Any]. Не очень полезно с точки зрения статической типизации, но все будет там, как и было обещано.

Кстати, «буквальный синтаксис» для массивов в Scala выглядит следующим образом:

Array(1, 2, 3, 4)     // => Array[Int] containing [1, 2, 3, 4]

См. Также : Подробнее о постоянных векторах

40
ответ дан rightfold 28 November 2019 в 02:52
поделиться

Scala выберет наиболее конкретный тип элемента Array, который может содержать все значения, в этом случае ему необходим наиболее общий тип Any, который является супертипом любого другого типа:

Array("a string", 10, new { val x = 1 }, () => ()) :+ "another value"

массив будет иметь тип Array[Any].

18
ответ дан soc 28 November 2019 в 02:52
поделиться

Scala может вскоре получить возможность создания «разнородного» списка: HList в Scala

4
ответ дан ePharaoh 28 November 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: