Как анонимный класс может использовать «расширяет» или «реализует»?

Посмотрите, как Вы можете расширять язык Common LISP с помощью XML шаблонная обработка : cl-quasi-quote XML пример , страница ,

(babel:octets-to-string
 (with-output-to-sequence (*html-stream*)
   
>>)) => "
"

проекта Это - в основном то же самое как читатель обратной галочки Lisp (который является для списка квази заключением в кавычки), но это также работает на различные другие вещи как XML (установленный на специальном <> синтаксис), JavaScript (установленный на 'js-inline), и т.д.

Для прояснения это реализовано в пользовательская библиотека ! И это компилирует статический XML, JavaScript, и т.д. части в , UTF-8 закодировал литеральные массивы байтов, которые готовы быть записанными в сетевой поток. С простым , (запятая) можно возвратиться к шепелявости и чередоваться, время выполнения генерировало данные в литеральные массивы байтов.

Это не для слабонервных, но это - то, во что библиотека компилирует вышеупомянутое:

(progn
 (write-sequence
  #(60 100 105 118 32 99 111 110 115 116 97 110 116 65 116 116 114 105 98
    117 116 101 61 34 52 50 34 32 115 111 109 101 74 97 118 97 83 99 114
    105 112 116 61 34 106 97 118 97 115 99 114 105 112 116 58 32 112 114
    105 110 116 40 40 52 48 32 43 32 50 41 41 34 32 114 117 110 116 105
    109 101 65 116 116 114 105 98 117 116 101 61 34)
  *html-stream*)
 (write-quasi-quoted-binary
  (let ((*transformation*
          #))
    (transform-quasi-quoted-string-to-quasi-quoted-binary
      (let ((*transformation*
               #))
        (locally
            (declare (sb-ext:muffle-conditions sb-ext:compiler-note))
         (let ((it (concatenate 'string "runtime calculated: " "&foo" "&bar")))
           (if it
               (transform-quasi-quoted-xml-to-quasi-quoted-string/attribute-value it)
               nil))))))
  *html-stream*)
 (write-sequence
  #(34 62 10 32 32 60 115 111 109 101 82 97 110 100 111 109 69 108 101 109
    101 110 116 62 10 32 32 32 32 60 115 111 109 101 79 116 104 101 114 47
    62 10 32 32 60 47 115 111 109 101 82 97 110 100 111 109 69 108 101 109
    101 110 116 62 10 60 47 100 105 118 62 10)
  *html-stream*)
 +void+)

Для ссылки, два больших вектора байта в вышеупомянутом похожи на это, когда преобразовано в строку:

"

И второй:

"\">
 
    
  
"

И это объединяется хорошо с другими структурами Lisp как макросы и функции. теперь, сравните это с JSPs...

91
задан Mike Rylander 14 May 2013 в 17:20
поделиться

1 ответ

Я предполагаю, что никто не понял вопроса. Я предполагаю то, что этот требуемый парень был чем-то вроде этого:

return new (class implements MyInterface {
    @Override
    public void myInterfaceMethod() { /*do something*/ }
});

, потому что это позволило бы вещи как несколько интерфейсных реализаций:

return new (class implements MyInterface, AnotherInterface {
    @Override
    public void myInterfaceMethod() { /*do something*/ }

    @Override
    public void anotherInterfaceMethod() { /*do something*/ }
});

это было бы действительно хорошо действительно; но это не позволяется в Java.

, Что Вы можете , делают использовать локальные классы внутренние блоки метода:

public AnotherInterface createAnotherInterface() {
    class LocalClass implements MyInterface, AnotherInterface {
        @Override
        public void myInterfaceMethod() { /*do something*/ }

        @Override
        public void anotherInterfaceMethod() { /*do something*/ }
    }
    return new LocalClass();
}
0
ответ дан 24 November 2019 в 06:48
поделиться
Другие вопросы по тегам:

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