Простой способ создания статического импорта для констант в существующем коде?

.htaccess file: добавить следующие строки:

Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

https://alexcican.com/post/how-to-remove-php-html-htm-extensions-with -htaccess /

Теперь вам нужно будет проверить условие AllowOverride в файле apache2.log: установить параметры AllowOverRide Все в корневом каталоге вашего веб-сайта:

    Options Indexes FollowSymLinks  
    AllowOverride All  
    Require all granted

Если вы попытаетесь получить доступ к своей веб-странице без расширения .php, вы можете выполнить следующую ошибку в файле apache error.log: /var/www/html/web/.htaccess: Неверная команда 'RewriteEngine', возможно, с ошибкой или определенной с помощью модуля, не включенного в конфигурацию сервера

. Чтобы исправить это: у вас не установлен модуль mod_rewrite. Чтобы установить его: выполните следующую команду: ln -s / etc / apache2 / mods-available /rewrite.load /etc/apache2/mods-enabled/rewrite.load

.htaccess: Неверная команда «RewriteEngine», возможно, с ошибкой или определена модулем, не включенным в конфигурацию сервера

Опять же, после обновления веб-страницы вы можете получить следующее Ошибка в файле error.log:

[negotiation:error] [pid 4650] [client 127.0.0.1:46461] AH00687: Negotiation: discovered file(s) matching request: /var/www/html/web/test (None could be negotiated). (I was trying to access localhost/web/test.php using the url: localhost/web/test)

Чтобы исправить это, вам нужно добавить следующие строки в apache2.conf:


AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .html
AddType application/x-httpd-php-source .phps

https://forums.digitalpoint.com/threads/htaccess-addtype-application-x-httpd-php-php-htm-html-and-maybe-a-fix.7584/#post-2491687

Теперь я могу получить доступ к файлу test.php, используя только имя файла: test

37
задан Thorbjørn Ravn Andersen 19 September 2015 в 10:30
поделиться

8 ответов

Одно предостережение: чрезмерное использование статический импорт может фактически сделать ваш код менее читабельным (imho), особенно если имя константы не указывает четко класс или перечисление, к которому он принадлежит. Вы также можете получить имена констант из разных классов / перечислений, которые звучат одинаково или даже имеют одинаковое имя.

Так что вы заставляете читателя надеяться, что его IDE сообщит ему класс (например, с помощью инструмента совет) или они должны перейти к нему, чтобы узнать, что это такое. Распечатки и фрагменты кода становятся гораздо менее читабельными.

Честно говоря, я очень редко использую статический импорт по этим причинам.

11
ответ дан 27 November 2019 в 05:04
поделиться

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

Для добавления импорта я рекомендую вставить import static application.KeyHolder. *; после пакета в каждом файле, который их использует.

Для удаления имени класса, в eclipse выполняет поиск Java для KeyHolder. * и ищет поле. Затем вы можете найти / заменить «KeyHolder». и заменить на "". Во избежание несоответствий убедитесь, что количество замененных элементов равно количеству совпадений для этого файла. Также убедитесь, что вы выполняете поиск вниз и начинаете после импорта.

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

Регулярное выражение было изобретено для решения подобных проблем! =)

вам нужно будет написать небольшой скрипт (или использовать поиск / замену регулярного выражения IDE). Единственная проблема состоит в том, что если есть много классов, которые должны быть статически импортированы, то это так же много работы. В противном случае, если это всего лишь один класс, такой как FOO.BLAH, вы можете использовать регулярное выражение, например

(\ bFOO \. (\ W +) \ b) -> заменить на группу 2 ($ 2 или \ 2 или ваш искатель регулярных выражений захватывает замены).

вы можете попробовать это здесь: http://www.gskinner.com/RegExr/ . Выберите вкладку замены и введите $ 2.

Проблема может возникнуть, если у вас есть такие выражения: FOO f = FOO.blah + "FOO.blah" , так что следите за этим.

Что касается оператора импорта в верхней части файла, в eclipse есть функция автоматического импорта, которая выполняет автоимпорт в формате и работает, пока имя импорта достаточно уникально. Или, если вы не можете использовать его из-за слишком распространенного имени, вы можете просто использовать скрипт perl, чтобы выполнить регулярное выражение вместо этого и добавить статический импорт.

2
ответ дан 27 November 2019 в 05:04
поделиться

Если бы я столкнулся с такой проблемой, я бы, вероятно, написал небольшую программу сделать это для меня. Ruby и Python (JRuby и Jython?) Довольно хорошо подходят для этой задачи, хотя вы могли бы сделать это и на Java.

Хорошо, так что это, вероятно, займет у вас по крайней мере столько же времени, сколько и ручная работа , но, по крайней мере, вам будет весело :).

0
ответ дан 27 November 2019 в 05:04
поделиться

Что-то, что всплывает как решение. Я бы порекомендовал использовать простой отличный скрипт. В основном семантика связана с анализом операторов импорта и файлов, на которые они ссылаются. Некоторые основные шаги могут быть такими, как

  1. Рекурсия каждого файла внутри каталога. Проверьте, имеет ли расширение файла .java
  2. Сопоставьте любую строку, которая начинается с import
  3. Для каждой такой строки откройте соответствующий исходный файл (вы уже знаете путь из оператора импорта).
  4. Сопоставьте объявление поля / метода для статического модификатора с помощью отражения
  5. Добавьте статическое значение после оператора импорта для совпадений, найденных на шаге 5.

Если у меня будет время, я попробую и опубликуйте небольшой отличный скрипт для того же.

-1
ответ дан 27 November 2019 в 05:04
поделиться

Звучит неплохо, но насколько они станут лучше после того, как вы изменили все файлы? Возможно, вам стоит подумать только об изменении файлов, над которыми вы уже работаете, по другим причинам.

1
ответ дан 27 November 2019 в 05:04
поделиться

Eclipse может выполнять глобальный поиск и заменять регулярным выражением по всем файлам в проекте.

Чтобы добавить статический импорт в начало всех файлов, вы можете заменить объявление пакета само по себе плюс статический импорт.

Затем организуйте импорт по всему проекту, и все готово.

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

0
ответ дан 27 November 2019 в 05:04
поделиться

Я не знаю, подойдет ли он вам, но вы всегда можете определить эти константы в интерфейсе, и пусть все ваши классы просто реализуют этот интерфейс. Затем, используя некоторые умные RegExp, как предлагают другие, вы можете избавиться от всех Foo.

Пример:

public interface Foo {
   static final String constant1 = "Some";
   static final String constant2 = "Value";
   //...
}

А затем

public class YourClass implements Foo {
   public YourClass() {
      System.out.println("Hello " + constant1);
   }
}
-3
ответ дан 27 November 2019 в 05:04
поделиться
Другие вопросы по тегам:

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