Jawa / Говнокод #25832 Ссылка на оригинал

0

  1. 1
Официальный тредик для обсирания джавы

Один пост -- один обсёр
поехали

Запостил: 6a6yuH 6a6yuH, (Updated )

Комментарии (35) RSS

  • abstract class Mammal {
    		void giveMilk(){}
    		abstract String talk();
    	}
    	
    	class Cat extends Mammal {
    		@Override
    		String talk() {
    			return "miau";
    		}
    	}
    	class Dog extends Mammal {
    		@Override
    		String talk() {
    			return "wwaf";
    		}
    	}

    И тут я решил научить кошку и собаку танцевать. Как мне добавить им метод с реализацией без копипаста?
    Миксинов и множественного наследия в жабе нет.

    Можно сделать интерфейс DancingMammal и реализовать его посредством делегирования вызовов от инстанса, который хранить внутри (замена наследия делегацией), но для классов (а Mammal это класс) это не работает, да и бойлерплейта будет много.

    Привет, кобенаторный взрыв
    class DancingDog extends Dog {
    		void dance(){}
    	}
    	class DancingCat extends Cat {
    		void dance(){} // Copy/paste
    	}
    .

    А арену выходит котлин, и говорит: "у меня есть сахар для делегирования, замени им наследование".

    abstract class Mammal {
    		fun giveMilk(){}
    		abstract fun talk():String
    	}
    	
    	class Cat : Mammal() {
    		override fun talk() = "miau"		
    	}
        
        class Dog : Mammal() {
    		override fun talk() = "wwaf"		
    	}
        
        class DancingMammal(private val mammal:Mammal): Mammal by mammal {
            fun dance(){} //No copypaste
        }

    Казалось бы: всё классно, класс один, но(!!!) делегирование НЕ работает для abstract class Mammal , так что если бы он был интерейсеом -- было бы меньше писанины, чем в джаве. Но так как он класс -- котлин уходит сосать тот же хуй, что сосет джава (подозреваю что на пару с сишарпом).
    Ответить
    • И тут на сцену выходит C++.

      class Mammal
      {
      public:
      	void giveMilk()
      	{
      	}
      
      	virtual std::string talk() = 0;
      };
      
      class Cat : public Mammal
      {
      public:
      	std::string talk() override
      	{
      		return std::string("miau");
      	}
      };
      
      class Dog : public Mammal
      {
      public:
      
      	std::string talk() override
      	{
      		return std::string("wwaf");
      	}
      };
      
      
      template <typename Parent>
      class DancingMammal : Parent
      {
      	static_assert(std::is_base_of<Mammal, Parent>::value, "Please, extend Mammal");
      public:
      	void dance()
      	{
      		std::cout << "I am dancing\n";
      		std::cout << this->talk();
      	}
      };


      Хуяк, вы слушаете маяк: У нас ОДИН класс (ну окей, их два, но это делает копулятор) и никакого копипаствы.

      Конечно, если млеков у нас будет 158, то секция кода распухнет, как укушенный осой хуй, но пока их два можно просто течь.

      Вопросы:
      1) Верно-ли я понимаю, что Java это язык для тупых неосиляторов, которые слишком тупы чтобы писать умный код, но имеют достаточно сильные пальцы, чтобы писать тупой бойлерплейт и копипаст?

      2) Как это правильно решить без божественных крестов?
      Ответить
      • >божественных крестов
        Нахуй иди, макака.
        Ответить
        • Значит, во всей публикации не понравился только термин «божественные кресты», а со всем остальным согласен?
          Ответить
      • ………………………………………._ё„„„„_
        …………………….…………...„--~*'Ї…….'\
        ………….…………………… („-~~--„ё_….,/м'М
        …….…………………….ё„-^"Ї : : : : :ё-Ї"Ї/'
        ……………………ё„„-^"Ї : : : : : : : '\ё„„,-"
        **ЇЇЇ'^^~-„„„----~^*'"Ї : : : : : : : : : :ё-"
        .:.:.:.:.„-^" : : : : : : : : : : : : : : : : :„-"
        :.:.:.:.:.:.:.:.:.:.: : : : : : : : : : ё„-^Ї
        .::.:.:.:.:.:.:.:. : : : : : : : ё„„-^Ї
        :.' : : '\ : : : : : : : ;ё„„-~"
        :.:.:: :"-„""***/*'мё'Ї
        :.': : : : :"-„ : : :"\
        .:.:.: : : : :" : : : : \,
        :.: : : : : : : : : : : : 'М
        : : : : : : :, : : : : : :/
        "-„_::::_„-*__„„~"


        Buy cialis online
        Cialis (tadalafil) tablets to treat erectile dysfunction available to buy online in daily 2.5mg or 5mg strengths, and as required 10mg or 20mg strengths.
        How to buy online

        1.Read medical information about erectile dysfunction
        2. Answer medical questions to check for eligibility
        3. Reviewed by doctors - posted from UK pharmacy

        http://www.doctorfox.co.uk/erectile-dysfunction/cialis.html


        ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~Q-
        Ответить
      • Я не понял, а какую задачу тут решили божественные кресты? Добавить в разные классы метод с одинаковой реализацией? Потому что научить имеющийся экземпляр млекопитающего (да хотя бы и собаку) нельзя; dance() можно вызывать, только если уже создан DancingMammal, и мы знаем его тип. То есть абстрактного DancingMammal у нас не будет - например, реализовать класс MammalDisco с методом addDancer(DancingMammal *m) мы не можем.
        Какой-нибудь реальный пример можно?
        Ответить
        • Кресты позволили не делать отдельно DancingCat и DancingDog потому что благодаря шаблону все нужные классы создал компилятор.

          Чтобы работал твой пример, надо сделать интерфейс IDancingMammal.

          Вообще говоря наследование ради переиспользования логики -- так себе идея, но как видишь на плюсах она реализуется лучше, чем на джаве
          Ответить
          • Это понятно, просто пока не смог придумать, для чего это бы именно в таком виде могло пригодиться.
            Может быть, если рассматривать классы не предметной области, а инструментальные, например, контейнеры.
            template<class Containter, T>
            class BrownContainer<Containter> : public Containter<T>
            {
              public:
                // Утиная типицазия такая утиная
                BrownContainer<Containter> where(function<T, bool> condition) {... begin() ... end() ... }
                void map(...) {...}
            };
            template<T>
            typedef BrownContainer<std::list, T> BrownList;
            template<T>
            typedef BrownContainer<std::vector, T> BrownVector;


            Что позволит расширять стандартные контейнеры своими методами:
            BrownList l = ...;
            BrownList ll = l.where(...);
            func_that_takes_std_list(ll);

            В C# это делается с помощью extension methods.
            Ответить
            • Разве extension methods позволят реализовать интерфейс?
              Ответить
              • Нет, я просто пытаюсь придумать, зачем вышеприведенный прием, невозможный в анскилльной Джаве, может пригодиться.
                Ответить
    • ………………………………………._ё„„„„_
      …………………….…………...„--~*'Ї…….'\
      ………….…………………… („-~~--„ё_….,/м'М
      …….…………………….ё„-^"Ї : : : : :ё-Ї"Ї/'
      ……………………ё„„-^"Ї : : : : : : : '\ё„„,-"
      **ЇЇЇ'^^~-„„„----~^*'"Ї : : : : : : : : : :ё-"
      .:.:.:.:.„-^" : : : : : : : : : : : : : : : : :„-"
      :.:.:.:.:.:.:.:.:.:.: : : : : : : : : : ё„-^Ї
      .::.:.:.:.:.:.:.:. : : : : : : : ё„„-^Ї
      :.' : : '\ : : : : : : : ;ё„„-~"
      :.:.:: :"-„""***/*'мё'Ї
      :.': : : : :"-„ : : :"\
      .:.:.: : : : :" : : : : \,
      :.: : : : : : : : : : : : 'М
      : : : : : : :, : : : : : :/
      "-„_::::_„-*__„„~"


      Buy cialis online
      Cialis (tadalafil) tablets to treat erectile dysfunction available to buy online in daily 2.5mg or 5mg strengths, and as required 10mg or 20mg strengths.
      How to buy online

      1.Read medical information about erectile dysfunction
      2. Answer medical questions to check for eligibility
      3. Reviewed by doctors - posted from UK pharmacy

      http://www.doctorfox.co.uk/erectile-dysfunction/cialis.html


      ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~Q-
      Ответить
    • (на мотив песни "Whoo-hoo")

      miau-miau, miau-miau-miau,
      miau-miau, miau-miau-miau,
      miau-miau, miau-miau, miau-miau-miau-miau
      Ответить
  • ………………………………………._ё„„„„_
    …………………….…………...„--~*'Ї…….'
    ………….…………………… („-~~--„ё_….,/м'М
    …….…………………….ё„-^"Ї : : : : :ё-Ї"Ї/'
    ……………………ё„„-^"Ї : : : : : : : 'ё„„,-"
    **ЇЇЇ'^^~-„„„----~^*'"Ї : : : : : : : : : :ё-"
    .:.:.:.:.„-^" : : : : : : : : : : : : : : : : :„-"
    :.:.:.:.:.:.:.:.:.:.: : : : : : : : : : ё„-^Ї
    .::.:.:.:.:.:.:.:. : : : : : : : ё„„-^Ї
    :.' : : ' : : : : : : : ;ё„„-~"
    :.:.:: :"-„""***/*'мё'Ї
    :.': : : : :"-„ : : :"
    .:.:.: : : : :" : : : : ,
    :.: : : : : : : : : : : : 'М
    : : : : : : :, : : : : : :/
    "-„_::::_„-*__„„~"


    Buy cialis online
    Cialis (tadalafil) tablets to treat erectile dysfunction available to buy online in daily 2.5mg or 5mg strengths, and as required 10mg or 20mg strengths.
    How to buy online

    1.Read medical information about erectile dysfunction
    2. Answer medical questions to check for eligibility
    3. Reviewed by doctors - posted from UK pharmacy

    http://www.doctorfox.co.uk/erectile-dysfunction/cialis.html


    ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~Q-
    Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8