• Почему один класс не видит переменных другого?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Потому что вы Java на всем известном сайте учите, а не по учебнику.
    Ответ написан
    1 комментарий
  • Нужно получить слова в которых первая буква - согласная и вывести их одним предложением через пробел. НО как это сделать через Stream API?

    roswell
    @roswell
    и швец, и жнец, и на дуде игрец
    import java.util.stream.Stream;
    
    public class Main {
    
        public static void main(String... args) {
            String vowels = "аеёиоуыэюя";
            String[] words = {"абра", "кадабра", "интерес", null, "Проверка", "ещё", "логика", "", "Ёж", "Сигнал"};
            Stream.of(words)
                .filter(word -> word != null && word.length() > 0 && !vowels.contains(word.substring(0, 1).toLowerCase()))
                .forEach(word -> System.out.print(word + " "));
        }
    
    }
    Ответ написан
    3 комментария
  • Как реализуются интерфеинтерфесы в Java?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Видимо не достаточно понимаете =)
    Когда вы имплементируете интерфейс, к примеру Runnable, то вы реализуете метод run(). Вы его не переопределяете а реализуете, это не одно и тоже с переопределением. В JAVA есть класс Thread в котором объявлено что он знает интерфейс Runnable(вполне конкретный) и что в нем совершенно точно есть реализация метода run(), других методов которые не объявлены в интерфейсе не знает.
    Например если вы создатите свой интерфейс:
    interface MyRunnable{
          void run(); 
    }

    То класс Thread никак не будет знать что это и что с ним делать и пошлет вас в веселую пешую прогулку.
    Даже если вы создатите "однофамильца":
    interface Runnable{
          void run(); 
    }

    То класс Thread никак не будет знать что это и что с ним делать и пошлет вас в веселую пешую прогулку. Потому что это не реализация java.lang.runnable.
    Зато такой момент сработает:
    interface MyRunnable extends Runnable{
          void some(); //Обратите внимание что тут уже run нельзя объявить т.к. он объявлен в  Runnable
    }

    и при реализации этого интерфейса вас заставят реализовывать уже 2 метода
    class CoolRunnable implements MyRunnable{
          void some(){System.out.print("some from MyRunnable")} 
          void run(){System.out.print("run from Runnable")} 
    }

    И в этом случае класс Thread увидит что класс CoolRunnable реализует интерфейс Runnable в котором есть метод run() о котором он знает и который ему нужен. Метод some() он не увидит. При запуске соответственно он выведет только "run from Runnable".

    Если попробовать на пальцах объяснить так сказать по аналогии с чемто. Скажем вы класс который может нажимать на левую кнопку мыши. Ничего другого вам не объясняли. Т.е. вам дали описание что это называется мышь и на котором есть кнопка слева и которую нужно нажать. Теперь любой производитель берет это описание и реализует мышь с левой кнопкой. Каждый свою, из разного материала, с разными механизмами кнопки и принципами работы, разной формы, и даже с кучей других кнопок. Все они попадают к вам, вы смотрите что конкретный экземпляр мыши реализован по описание которое вы знаете, кроме того это именно то описание что у вас а не одноименное. На основе этого вы признаете что эта вещь вам подходит и начинаете нажимать левую кнопку мыши на любой такой мышке которую вам дадут. Если же приходит другой предмет то вы ломаете палец, потом руку и умираете от потери крови с криками что это не по описанию что у вас есть.
    Ответ написан
    Комментировать
  • Почему ArrayDeque не может быть создана для Charов?

    В java в обобщениях нельзя использовать примитивы. Для этого существуют классы обёртки. Для char это Character, для int - Integer и т.д
    Ответ написан
    Комментировать