Реализовать Mixin в Java? [закрытый]

Я только что увидел ваше сообщение на форуме OJS3.

Для NginX попробуйте эту конфигурацию

# FORGE CONFIG (DO NOT REMOVE!)
include forge-conf/evidenciaonojs.tk/before/*;

server {
    listen 80;
    listen [::]:80;
    server_name evidenciaonojs.tk;
    root /home/forge/evidenciaonojs.tk/;

    # FORGE SSL (DO NOT REMOVE!)
    # ssl_certificate;
    # ssl_certificate_key;

    ssl_protocols TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/dhparams.pem;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    # FORGE CONFIG (DO NOT REMOVE!)
    include forge-conf/evidenciaonojs.tk/server/*;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/evidenciaonojs.tk-error.log error;

    error_page 404 /index.php;

    location ~ ^(.+\.php)(.*)$ {
        set $path_info $fastcgi_path_info;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param PATH_TRANSLATED $document_root$path_info;

        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }
        include fastcgi_params;

        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

# FORGE CONFIG (DO NOT REMOVE!)
include forge-conf/evidenciaonojs.tk/after/*;

Обязательно установите:
1. cgi.fix_pathinfo=1 в PHP-FPM (в /etc/php/7.2/fpm/php .ini, вероятно).
2. security.limit_extensions = .php в вашем конфигурационном файле пула FPM (в /etc/php/7.2/fpm/pool.d/your_site.conf)
3. disable_path_info = Off (в OJS config.inc.php)

Перезапустите службы PHP-FPM и NginX. Затем, если это сработает, прочитайте о пороках NginX IF и «cgi.fix_pathinfo».

55
задан Basil Bourque 3 August 2018 в 09:32
поделиться

9 ответов

Вы могли использовать CGLIB для этого. Класс Mixin в состоянии генерировать динамический класс от нескольких интерфейсов / объектные делегаты:

static Mixin    create(java.lang.Class[] interfaces,
                        java.lang.Object[] delegates)
static Mixin    create(java.lang.Object[] delegates)
static Mixin    createBean(java.lang.Object[] beans) 
21
ответ дан Daniel Fanjul 7 November 2019 в 07:23
поделиться

Я верю , это может ответить Вам вопрос..., хотя я не полностью уверен, что я понимаю то, что смешивание все же...

1
ответ дан Community 7 November 2019 в 07:23
поделиться
2
ответ дан TofuBeer 7 November 2019 в 07:23
поделиться

Посмотрите на http://code.google.com/p/javadude/wiki/AnnotationsMixinExample

, Это использует ряд аннотаций, которые я создал.

Примечание: я работаю над основным обновлением аннотаций, которое включает некоторую поломку API. Я планирую выпустить новую версию за следующие несколько недель.

4
ответ дан Scott Stanchfield 7 November 2019 в 07:23
поделиться

В том смысле, что соединение Ruby - в является эквивалентом абстрактного класса Java, нет, Вы не можете реализовать соединение - в в Java. Можно приблизиться при помощи интерфейсов и таким образом определения абсолютно никакого кода в соединении - в, но Вы не можете непосредственно достигнуть того же поведения как в соединении Ruby - в.

5
ответ дан Eddie 7 November 2019 в 07:23
поделиться

Так как Java только поддерживает единичное наследование, которое не возможно. Взгляните на WP: Mixin.

РЕДАКТИРОВАНИЕ : Из-за комментариев об интерфейсах: прохладная вещь о mixins состоит в том, что можно объединить их, не пишущий код комбинации. С интерфейсами необходимо реализовать функциональность комбинации сами (кроме одного класса, который можно расширить)!

8
ответ дан Johannes Weiss 7 November 2019 в 07:23
поделиться

Я сказал бы просто состав объекта использования. Каждый раз Вы хотите добавить новую функциональность, составить другой объект в класс как участник. Если Вы хотите сделать все свои смешанные - в классах того же типа, можно использовать массив в качестве членского объекта, где каждый элемент составлен со всеми другими, и можно отправить конкретному элементу.

13
ответ дан Martin 7 November 2019 в 07:23
поделиться

только что наткнулся на: http://www.berniecode.com/blog/2009/08/16/mixins-for-java/

5
ответ дан 7 November 2019 в 07:23
поделиться

Самый простой подход - использовать статический импорт. Это позволяет повторно использовать код, который «выглядит» как часть класса, но на самом деле определен где-то еще.

Плюсы:

  • очень просто
  • вы можете «смешивать» столько статических импортов, сколько захотите

Минусы:

  • статические методы не будут иметь доступа к 'это', так что тебе придется передать это в ручном
  • нет состояния: ваши статические методы не могут иметь свои собственные поля экземпляра. Они могут определять только свои собственные статические поля, которые затем используются любым объектом, вызывающим статический метод.
  • не могут определять общедоступные методы в клиентском классе (тот, в который добавлен код). В Ruby импорт миксина фактически определяет эти общедоступные методы как общедоступные методы в вашем классе. В Java в этом случае лучшим решением будет наследование (при условии, что вам не нужно расширять несколько классов)

Пример:

import static my.package.MyHelperUtility.methodDefinedInAnotherClass;

public class MyNormalCode {
    public void example() {
        methodDefinedInAnotherClass();
    }
}
7
ответ дан 7 November 2019 в 07:23
поделиться
Другие вопросы по тегам:

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