Return Type in F-Bounded Polymorphism Java The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) The Ask Question Wizard is Live! Data science time! April 2019 and salary with experienceIs Java “pass-by-reference” or “pass-by-value”?How do I efficiently iterate over each entry in a Java Map?Should we @Override an interface's method implementation?What is the difference between public, protected, package-private and private in Java?How do I read / convert an InputStream into a String in Java?When to use LinkedList over ArrayList in Java?How do I generate random integers within a specific range in Java?How do I convert a String to an int in Java?Creating a memory leak with JavaHow should I have explained the difference between an Interface and an Abstract class?

Do working physicists consider Newtonian mechanics to be "falsified"?

A pet rabbit called Belle

Sort list of array linked objects by keys and values

ELI5: Why do they say that Israel would have been the fourth country to land a spacecraft on the Moon and why do they call it low cost?

Hopping to infinity along a string of digits

Make it rain characters

How can I protect witches in combat who wear limited clothing?

How to grep and cut numbers from a file and sum them

Am I ethically obligated to go into work on an off day if the reason is sudden?

Arduino Pro Micro - switch off LEDs

Is this wall load bearing? Blueprints and photos attached

Can undead you have reanimated wait inside a portable hole?

Would it be possible to rearrange a dragon's flight muscle to somewhat circumvent the square-cube law?

Are spiders unable to hurt humans, especially very small spiders?

How to pronounce 1ターン?

Can a 1st-level character have an ability score above 18?

What are these Gizmos at Izaña Atmospheric Research Center in Spain?

How did passengers keep warm on sail ships?

Why does the Event Horizon Telescope (EHT) not include telescopes from Africa, Asia or Australia?

How are presidential pardons supposed to be used?

Install many applications using one command

Is above average number of years spent on PhD considered a red flag in future academia or industry positions?

how can a perfect fourth interval be considered either consonant or dissonant?

Didn't get enough time to take a Coding Test - what to do now?



Return Type in F-Bounded Polymorphism Java



The 2019 Stack Overflow Developer Survey Results Are In
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
The Ask Question Wizard is Live!
Data science time! April 2019 and salary with experienceIs Java “pass-by-reference” or “pass-by-value”?How do I efficiently iterate over each entry in a Java Map?Should we @Override an interface's method implementation?What is the difference between public, protected, package-private and private in Java?How do I read / convert an InputStream into a String in Java?When to use LinkedList over ArrayList in Java?How do I generate random integers within a specific range in Java?How do I convert a String to an int in Java?Creating a memory leak with JavaHow should I have explained the difference between an Interface and an Abstract class?



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








0















I have an interface:



public interface Message<T extends Message<T>> 



I have a class that implements this method as



public class FulfilmentReleasedDomModel implements Message<FulfilmentReleasedDomModel> 


And I have this method:



private <T extends Message<T>> Mono<T> getDomainModel(ConsumerRecord<String, String> record) 


When I try to return an object of type Mono<FulfilmentReleaseDomModel> from this method, the compiler throws an error and asks me to cast it to (Mono<T>).



My question is, since I have bounded T to extends Message, and FulfilmentReleasedDomModel implements Message<FulfilmentReleasedDomModel>, why do I need to cast it to Mono<T>?










share|improve this question




























    0















    I have an interface:



    public interface Message<T extends Message<T>> 



    I have a class that implements this method as



    public class FulfilmentReleasedDomModel implements Message<FulfilmentReleasedDomModel> 


    And I have this method:



    private <T extends Message<T>> Mono<T> getDomainModel(ConsumerRecord<String, String> record) 


    When I try to return an object of type Mono<FulfilmentReleaseDomModel> from this method, the compiler throws an error and asks me to cast it to (Mono<T>).



    My question is, since I have bounded T to extends Message, and FulfilmentReleasedDomModel implements Message<FulfilmentReleasedDomModel>, why do I need to cast it to Mono<T>?










    share|improve this question
























      0












      0








      0








      I have an interface:



      public interface Message<T extends Message<T>> 



      I have a class that implements this method as



      public class FulfilmentReleasedDomModel implements Message<FulfilmentReleasedDomModel> 


      And I have this method:



      private <T extends Message<T>> Mono<T> getDomainModel(ConsumerRecord<String, String> record) 


      When I try to return an object of type Mono<FulfilmentReleaseDomModel> from this method, the compiler throws an error and asks me to cast it to (Mono<T>).



      My question is, since I have bounded T to extends Message, and FulfilmentReleasedDomModel implements Message<FulfilmentReleasedDomModel>, why do I need to cast it to Mono<T>?










      share|improve this question














      I have an interface:



      public interface Message<T extends Message<T>> 



      I have a class that implements this method as



      public class FulfilmentReleasedDomModel implements Message<FulfilmentReleasedDomModel> 


      And I have this method:



      private <T extends Message<T>> Mono<T> getDomainModel(ConsumerRecord<String, String> record) 


      When I try to return an object of type Mono<FulfilmentReleaseDomModel> from this method, the compiler throws an error and asks me to cast it to (Mono<T>).



      My question is, since I have bounded T to extends Message, and FulfilmentReleasedDomModel implements Message<FulfilmentReleasedDomModel>, why do I need to cast it to Mono<T>?







      java type-conversion type-erasure






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Mar 22 at 6:34









      Prashant PandeyPrashant Pandey

      457316




      457316






















          1 Answer
          1






          active

          oldest

          votes


















          1














          A common misconception about generics is that the callee decides what the generic type is. No, the caller does.



          You, as the writer of the method, don't get to decide what T is. By returning Mono<FulfilmentReleasedDomModel>, you are saying that T must be FulfilmentReleasedDomModel. But in actuality, the caller of your method will decide what T is. They could declare a type called Foo that implements Message<Foo> and say that T is Foo. You would need to return a Mono<Foo> instead.



          It seems like your method should not be generic, because the callee is deciding what type to use:



          private Mono<FulfilmentReleasedDomModel> getDomainModel(ConsumerRecord<String, String> record) 


          Alternatively, if you want to make this method more flexible, so that you can change its implementation to return something else without changing its return type, you can use generic wildcards:



          private Mono<? extends Message> getDomainModel(ConsumerRecord<String, String> record) 





          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55294100%2freturn-type-in-f-bounded-polymorphism-java%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            A common misconception about generics is that the callee decides what the generic type is. No, the caller does.



            You, as the writer of the method, don't get to decide what T is. By returning Mono<FulfilmentReleasedDomModel>, you are saying that T must be FulfilmentReleasedDomModel. But in actuality, the caller of your method will decide what T is. They could declare a type called Foo that implements Message<Foo> and say that T is Foo. You would need to return a Mono<Foo> instead.



            It seems like your method should not be generic, because the callee is deciding what type to use:



            private Mono<FulfilmentReleasedDomModel> getDomainModel(ConsumerRecord<String, String> record) 


            Alternatively, if you want to make this method more flexible, so that you can change its implementation to return something else without changing its return type, you can use generic wildcards:



            private Mono<? extends Message> getDomainModel(ConsumerRecord<String, String> record) 





            share|improve this answer



























              1














              A common misconception about generics is that the callee decides what the generic type is. No, the caller does.



              You, as the writer of the method, don't get to decide what T is. By returning Mono<FulfilmentReleasedDomModel>, you are saying that T must be FulfilmentReleasedDomModel. But in actuality, the caller of your method will decide what T is. They could declare a type called Foo that implements Message<Foo> and say that T is Foo. You would need to return a Mono<Foo> instead.



              It seems like your method should not be generic, because the callee is deciding what type to use:



              private Mono<FulfilmentReleasedDomModel> getDomainModel(ConsumerRecord<String, String> record) 


              Alternatively, if you want to make this method more flexible, so that you can change its implementation to return something else without changing its return type, you can use generic wildcards:



              private Mono<? extends Message> getDomainModel(ConsumerRecord<String, String> record) 





              share|improve this answer

























                1












                1








                1







                A common misconception about generics is that the callee decides what the generic type is. No, the caller does.



                You, as the writer of the method, don't get to decide what T is. By returning Mono<FulfilmentReleasedDomModel>, you are saying that T must be FulfilmentReleasedDomModel. But in actuality, the caller of your method will decide what T is. They could declare a type called Foo that implements Message<Foo> and say that T is Foo. You would need to return a Mono<Foo> instead.



                It seems like your method should not be generic, because the callee is deciding what type to use:



                private Mono<FulfilmentReleasedDomModel> getDomainModel(ConsumerRecord<String, String> record) 


                Alternatively, if you want to make this method more flexible, so that you can change its implementation to return something else without changing its return type, you can use generic wildcards:



                private Mono<? extends Message> getDomainModel(ConsumerRecord<String, String> record) 





                share|improve this answer













                A common misconception about generics is that the callee decides what the generic type is. No, the caller does.



                You, as the writer of the method, don't get to decide what T is. By returning Mono<FulfilmentReleasedDomModel>, you are saying that T must be FulfilmentReleasedDomModel. But in actuality, the caller of your method will decide what T is. They could declare a type called Foo that implements Message<Foo> and say that T is Foo. You would need to return a Mono<Foo> instead.



                It seems like your method should not be generic, because the callee is deciding what type to use:



                private Mono<FulfilmentReleasedDomModel> getDomainModel(ConsumerRecord<String, String> record) 


                Alternatively, if you want to make this method more flexible, so that you can change its implementation to return something else without changing its return type, you can use generic wildcards:



                private Mono<? extends Message> getDomainModel(ConsumerRecord<String, String> record) 






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Mar 22 at 6:55









                SweeperSweeper

                72.8k1075144




                72.8k1075144





























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55294100%2freturn-type-in-f-bounded-polymorphism-java%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Kamusi Yaliyomo Aina za kamusi | Muundo wa kamusi | Faida za kamusi | Dhima ya picha katika kamusi | Marejeo | Tazama pia | Viungo vya nje | UrambazajiKuhusu kamusiGo-SwahiliWiki-KamusiKamusi ya Kiswahili na Kiingerezakuihariri na kuongeza habari

                    Swift 4 - func physicsWorld not invoked on collision? The Next CEO of Stack OverflowHow to call Objective-C code from Swift#ifdef replacement in the Swift language@selector() in Swift?#pragma mark in Swift?Swift for loop: for index, element in array?dispatch_after - GCD in Swift?Swift Beta performance: sorting arraysSplit a String into an array in Swift?The use of Swift 3 @objc inference in Swift 4 mode is deprecated?How to optimize UITableViewCell, because my UITableView lags

                    Access current req object everywhere in Node.js ExpressWhy are global variables considered bad practice? (node.js)Using req & res across functionsHow do I get the path to the current script with Node.js?What is Node.js' Connect, Express and “middleware”?Node.js w/ express error handling in callbackHow to access the GET parameters after “?” in Express?Modify Node.js req object parametersAccess “app” variable inside of ExpressJS/ConnectJS middleware?Node.js Express app - request objectAngular Http Module considered middleware?Session variables in ExpressJSAdd properties to the req object in expressjs with Typescript