{"id":21079,"date":"2022-11-12T01:19:34","date_gmt":"2022-11-11T19:49:34","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/"},"modified":"2022-11-12T01:19:34","modified_gmt":"2022-11-11T19:49:34","slug":"solved-java-lambda-consumer-compilation-behavior","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/","title":{"rendered":"[Solved] Java Lambda Consumer Compilation behavior"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-49332561\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"49332561\" data-parentid=\"49332136\" data-score=\"1\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>The problem is that your two lambdas could be using the value of <code>datamap<\/code> before it has been initialized.  At least, that is what the JLS definite assignment rules are saying.<\/p>\n<p>This is what will happen when the <code>ConsumerTest<\/code> object is created:<\/p>\n<ol>\n<li>The bare object is allocated.<\/li>\n<li>The superclass constructor is called (<code>Object()<\/code>) which does nothing.<\/li>\n<li>The instance field declarations are &#8220;executed&#8221;\n<ol>\n<li><code>dataMap<\/code> &#8230; not initialized<\/li>\n<li><code>allConsumers<\/code> &#8230; not initialized<\/li>\n<li><code>evenConsumer<\/code> &#8230; initialized to the value of the first <code>lambda<\/code><\/li>\n<li><code>oddConsumer<\/code> &#8230; initialized to the value of the second <code>lambda<\/code><\/li>\n<\/ol>\n<\/li>\n<li>The body of the constructor is executed\n<ol>\n<li><code>dataMap<\/code> is initialized<\/li>\n<li><code>allConsumers<\/code> is initialized.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>The problem is (conceptually) this.  Those lambdas could in theory be passed  anywhere as soon as they have been initialized.  If the recipient decides to use them  <em>before<\/em> the <code>dataMap<\/code> variable has been initialized, then what would the lambdas see?<\/p>\n<ul>\n<li>If the <code>dataMap<\/code> variable was not <code>final<\/code>, then they would see the default initial value; i.e. <code>null<\/code>.<\/li>\n<li>In the case where <code>dataMap<\/code> is final, they are not allowed to see anything.  The <code>dataMap<\/code> variable must be definitely assigned before it is used &#8230; since it is <code>final<\/code>.  The JLS is quite particular on this point. <\/li>\n<\/ul>\n<p>(Try writing <em>any<\/em> code that reads a <code>final<\/code> variable before it is initialized and you will see what I mean.)<\/p>\n<p>In essence, this is just a rather unexpected (though perfectly logical) consequence of the normal Java rules for <code>final<\/code> initialization.<\/p>\n<hr>\n<p>I can think of three solutions in this case:<\/p>\n<ul>\n<li>Don&#8217;t make the <code>dataMap<\/code> variable <code>final<\/code>.  It doesn&#8217;t need to be.<\/li>\n<li>Initialize <code>dataMap<\/code> in its declaration rather than in the constructor.<\/li>\n<li>Initialize the lambdas inside the constructor, after initializing <code>dataMap<\/code>.  (Ugly &#8230; but it would work.)        <\/li>\n<\/ul>\n<\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">1<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Java Lambda Consumer Compilation behavior <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] The problem is that your two lambdas could be using the value of datamap before it has been initialized. At least, that is what the JLS definite assignment rules are saying. This is what will happen when the ConsumerTest object is created: The bare object is allocated. The superclass constructor is called (Object()) which &#8230; <a title=\"[Solved] Java Lambda Consumer Compilation behavior\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/\" aria-label=\"More on [Solved] Java Lambda Consumer Compilation behavior\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[323,995],"class_list":["post-21079","post","type-post","status-publish","format-standard","hentry","category-solved","tag-java","tag-lambda"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] Java Lambda Consumer Compilation behavior - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Java Lambda Consumer Compilation behavior - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] The problem is that your two lambdas could be using the value of datamap before it has been initialized. At least, that is what the JLS definite assignment rules are saying. This is what will happen when the ConsumerTest object is created: The bare object is allocated. The superclass constructor is called (Object()) which ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-11T19:49:34+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Java Lambda Consumer Compilation behavior\",\"datePublished\":\"2022-11-11T19:49:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/\"},\"wordCount\":270,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"java\",\"lambda\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/\",\"name\":\"[Solved] Java Lambda Consumer Compilation behavior - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-11-11T19:49:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Java Lambda Consumer Compilation behavior\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Java Lambda Consumer Compilation behavior - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Java Lambda Consumer Compilation behavior - JassWeb","og_description":"[ad_1] The problem is that your two lambdas could be using the value of datamap before it has been initialized. At least, that is what the JLS definite assignment rules are saying. This is what will happen when the ConsumerTest object is created: The bare object is allocated. The superclass constructor is called (Object()) which ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/","og_site_name":"JassWeb","article_published_time":"2022-11-11T19:49:34+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Java Lambda Consumer Compilation behavior","datePublished":"2022-11-11T19:49:34+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/"},"wordCount":270,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["java","lambda"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/","url":"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/","name":"[Solved] Java Lambda Consumer Compilation behavior - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-11-11T19:49:34+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-java-lambda-consumer-compilation-behavior\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Java Lambda Consumer Compilation behavior"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/21079","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=21079"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/21079\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=21079"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=21079"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=21079"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}