• Как вызвать метод?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Если invoke() обязан быть интерфейсным методом, то видится такое решение:
    1) Интерфейс Invokable должен лежать в том же пакете, откуда он будет вызываться
    2) В этом же пакете нужно создать некий package-private класс (проще всего - enum) с одним-единственным инстансом:
    enum Lock { 
        LOCK;
     }

    3) в метод invoke передавать Lock:
    public static interface Invokable {
      public void invoke(@NonNull Lock lock);
    };

    4) В реализации дополнительно проверять переданный Lock на null
    5) В месте "правильного" вызова передавать: model.invoke(Lock.LOCK);

    Если метод invoke не обязан быть интерфейсным, то просто сделать его package-private и держать реализацию в том же пакете.

    Но мне кажется, что где-то ошибка проектирования. Если изложишь задачу более подробно, можно найти более нормальное решение.
    Ответ написан
  • Java: как проверить сколько осталось места на диске, на котором сохраняются временные файлы?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    File file = new File(System.getProperty("java.io.tmpdir"));
    long freeSpace = file.getFreeSpace();
    Ответ написан
    Комментировать
  • Нужно ли переинициализировать переменные Java состоящие из других переменных?

    GavriKos
    @GavriKos
    Переменная не состоит из других переменных. Она состоит из значения и никак не связана с другими переменными.
    После:
    int varSum = var1 + var2 + var3;
    в варСум будет сумма ЗНАЧЕНИЙ переменных var1-var3 и никакой связи с ними не будет.
    Ответ написан
    3 комментария
  • Java Stream Api: как получить кол-во элементов не завершая поток?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Нельзя, это число появится только после завершения стрима.
    Ответ написан
    1 комментарий
  • Почему hashset добавляет одинаковые объекты?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Переписывать нужно методы hashСode и equals вместе.
    Получилось так, что equals, вызываемый при обнаружении равенства hasСode, унаследован от Object. А он там сравнивает объекты по их адресу в памяти. Которые, для разных объектов, само собой, разные. Поэтому Ваш HashSet и считает что ВСЕ новые объекты, какой бы ни был у них hashcode, будут разными!

    Просто перепишите и equals, чтобы он сравнивал между собой соответствующие друг другу поля класса у разных его экземпляров. И при их равенстве HashSet отвергнет второй объект, у которого тот же hashCode и те же значения полей.

    Больше про эти дела, например тут.

    И вообще это очень полезное и железное правило: одновременно менять (или проверять работоспособность этой сладкой парочки) hashCode и equals.
    Ответ написан
    2 комментария
  • Развитие Java инженера?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    По большей части, java это веб-приложения, следовательно нужно понимать, как они запускаются и уметь настраивать соответствующие службы.

    Разберитесь с серверами приложений - нужно на практике уметь написать простенькое веб-приложение и запустить его под tomcat, соотсветственно разобраться с настройками в tomcat и настройкой https. Заодно и с сертификатами разобраться. В дальнейшем можно усложнить свой хелловорлд, добавив авторизацию, перенаправлением, авторизацию по сертификатам и оптимизацией томката.

    Насколько хорошо все с Linux? простой bash скриптинг и поднятие всего парка под Линукс? Если опыта нет (тимсити часто под виндой крутится), то все это научиться поднимать под линукс, и тимсити, и томкат.

    Кроме томката, можно будет потом глянуть другие сервера приложений (томкат один из самых простых, в котором есть практически все, что нужно для энтерпрайза), смотреть другие сервера есть смысл, если у вас используется другой.
    Ответ написан
    Комментировать
  • Почему в HashMap используется хэшкод, а не просто ссылки?

    @krog
    Developer
    При хорошей хэш-функции получаем временную сложность поиска - O(1). Без хэшкода сложность поиска будет O(n) (при плохой хэш-функции тоже). Корзины нужны для разрешения конфликтов методом цепочек.
    Если вы имеете ввиду, что можно использовать адрес объекта вместо хэш-кода, то нельзя из-за того, что GC меняет адреса (операция mark-sweep-compact) или, например, логически эквивалентные объекты могут иметь разные адреса.
    Ответ написан
    Комментировать
  • Безопасно ли сейчас держать промежуточную ноду TOR?

    Jump
    @Jump
    Системный администратор со стажем.
    Собственно ноду TOR держать никто не запрещает.
    Просто если кто-то будет незаконной деятельностью через твою ноду заниматься - можно огрести проблем.
    В логах отображается последняя нода - выходная, на нее основные проблемы.
    Промежуточную отследить сложнее - гораздо меньше шансов словить проблемы.

    то за все отвечает оператор EXIT-а
    Нет, оператор выходной ноды ответственности не несет, но проблемы огрести может.
    Ответ написан
    7 комментариев
  • На чем писать интернет-магазин PHP или NodeJS или...?

    @BorisKorobkov Куратор тега PHP
    Web developer
    50 тыс. товаров - это мелкий магазин. Пишите на том ЯП, который лучше знаете.
    Или возьмите любой готовый интернет-магазин.
    Ответ написан
    Комментировать
  • Почему в HashMap используется хэшкод, а не просто ссылки?

    axifive
    @axifive
    Software Engineer
    Хэшкод используется для проверки уникальности сохраняемых объектов ключей. Но так как уникальность хэша ограничена длиной типа int, то может возникать коллизия для этого и используются связные списки объектов с одинаковыми хэшкодами.

    Почему же не просто ссылки? Представьте, что мы последовательно добавляем в Map два эквивалентных объекта-ключа, ссылки у них разные. Получается в Map будет два объекта, они имеют одинаковые хэши, но разные ссылки. А, по определению, в Map все ключи должны быть уникальны.
    Ответ написан
    6 комментариев
  • Как в Java подключить зависимости из git репозитория?

    @Vorh
    1)Создаешь Maven проект
    2)Открываешь файл pom.xml

    По умолчанию содержание файла примерно такое:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>ru.test</groupId>
    	<artifactId>test.a</artifactId>
    	<packaging>war</packaging>
    	<version>1</version>
    	<name>name-project</name>
    
    </project>


    3) Добавляем репозиторий
    <repository>
          <id>jitpack.io</id>
          <url>https://jitpack.io</url>
    </repository>

    4) Добавляем зависимость
    <dependency>
        <groupId>com.github.User</groupId>
        <artifactId>Repo name</artifactId>
        <version>Release tag</version>
    </dependency>


    В итоге полное содержание pom-ника :
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>ru.test</groupId>
        <artifactId>test.a</artifactId>
        <packaging>war</packaging>
        <version>1</version>
        <name>name-project</name>
    
        <repositories>
               <repository>
                   <id>jitpack.io</id>
                   <url>https://jitpack.io</url>
               </repository>
        </repositories>
    
        <dependencies>
            <dependency>
                <groupId>com.github.User</groupId>
                <artifactId>Repo name</artifactId>
                <version>Release tag</version>
            </dependency>
        </dependencies>
    </project>
    Ответ написан
    5 комментариев