Эквивалентный из анонимных методов C# в Java?

Array.slice может использоваться для копирования массива или части массива.. http://www.devguru.com/Technologies/Ecmascript/Quickref/Slice.html Это работало бы со строками и числами.. - менять струну в одном массиве не влияло бы на другой - но объекты все еще просто копируются ссылкой, таким образом, изменения в ссылочных объектах в одном массиве имели бы влияние на другом массиве.

Вот пример менеджера отмены JavaScript, который мог быть полезен для этого: http://www.ridgway.co.za/archive/2007/11/07/simple-javascript-undo-manager-for-dtos.aspx

30
задан nawfal 4 July 2014 в 05:10
поделиться

4 ответа

До Java 8:

Ближайшими к делегатам Java являются интерфейсы с одним методом. Вы можете использовать анонимный внутренний класс.

interface StringFunc {
   String func(String s);
}

void doSomething(StringFunc funk) {
   System.out.println(funk.func("whatever"));
}

doSomething(new StringFunc() {
      public String func(String s) {
           return s + "asd";
      }
   });


doSomething(new StringFunc() {
      public String func(String s) {
           return new StringBuffer(s).reverse().toString();
      }
   });

Java 8 и выше:

Java 8 добавляет в язык лямбда-выражения.

    doSomething((t) -> t + "asd");
    doSomething((t) -> new StringBuilder(t).reverse().toString());
61
ответ дан 27 November 2019 в 23:15
поделиться

Ваш пример будет выглядеть так на Java с использованием аномальных внутренних классов:

interface Func {
    String execute(String s);
}

public String doSomething(Func someDelegate) {
    // Do something involving someDelegate.execute(String s)
}

doSomething(new Func() { public String execute(String s) { return s + "asd"; } });
doSomething(new Func() { public String execute(String s) { return new StringBuilder(s).reverse().toString(); } } });
4
ответ дан 27 November 2019 в 23:15
поделиться

Не совсем так, но в Java есть нечто подобное.

Это называется анонимными внутренними классами.

Позвольте мне привести Вот пример:

DoSomething(new Runnable() {
   public void run() {
       // "delegate" body
   }
});

Это немного более подробно и требует интерфейса для реализации, но в остальном это почти то же самое

13
ответ дан 27 November 2019 в 23:15
поделиться

Можно ли передать код нравится в Яве? Я использую обработку фреймворк, имеющий довольно старый версия Java (в ней нет generics).

Поскольку вопрос задан об ответе, специфичном для обработки, прямого эквивалента не существует. Но Processing использует уровень языка Java 1.4, а Java 1.1 представила анонимные внутренние классы, которые являются грубым приближением.

3
ответ дан 27 November 2019 в 23:15
поделиться