var a1 = [1,2,3,6];
var a2 = [1,2,3,5];
function check(a, b) {
return (a.length != b.length) ? false :
a.every(function(row, index) {
return a[index] == b[index];
});
}
check(a1, a2);
////// ИЛИ ///////
var a1 = [1,2,3,6];
var a2 = [1,2,3,6];
function check(a, b) {
return (a.length != b.length) ? false :
!(a.some(function(row, index) {
return a[index] != b[index];
}));
}
check(a1, a2)
Внутренним классам (как Button.ClickEvent
) нужна ссылка на экземпляр внешнего класса (Button
).
, Что синтаксис создает новый экземпляр Button.ClickEvent
с его внешним набором ссылки класса к значению button
.
Вот пример - игнорируют отсутствие инкапсуляции и т.д., это только в целях демонстрации:
class Outer
{
String name;
class Inner
{
void sayHi()
{
System.out.println("Outer name = " + name);
}
}
}
public class Test
{
public static void main(String[] args)
{
Outer outer = new Outer();
outer.name = "Fred";
Outer.Inner inner = outer.new Inner();
inner.sayHi();
}
}
раздел See 8.1.3 из спецификации для больше о внутренних классах и экземплярах включения.
Нестатический внутренний класс в Java содержит скрытую ссылку, которая указывает на экземпляр внешнего класса, в котором это объявляется. Таким образом, сообщение об ошибке, которое Вы получили первоначально, говорит Вам, что Вы не можете создать новый экземпляр внутреннего класса, также не определяя экземпляр внешнего класса для него, чтобы быть присоединенными.
, Возможно, причина Вы не видели, что синтаксис прежде - то, что внутренние классы часто выделяются в методе внешнего класса, где компилятор заботится об этом автоматически.
Кнопка. ClickEvent является нестатическим внутренним классом, таким образом, экземпляр этого класса может только существовать включенный в экземпляр Кнопки.
В Вашем втором примере кода у Вас есть экземпляр Кнопки, и Вы создаете экземпляр ClickEvent, включенного в этот экземпляр Кнопки...
Чтобы постараться не смущать себя и коллег - программистов с этой редко используемой функцией, можно всегда делать внутренние классы статичными.
В случае, если ссылка на внешний класс необходима, можно передать его явно в конструкторе.
Ваш код скомпилировал бы, имел Вас, ввел
buttonClick(new Button().ClickEvent(button));
вместо
buttonClick(new Button.ClickEvent(button));
, поскольку конструктор является методом и когда Вы называете метод в Java, необходимо передать список аргументов, даже когда это пусто.