{"id":84089,"date":"2018-11-30T10:00:06","date_gmt":"2018-11-30T08:00:06","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=84089"},"modified":"2018-11-30T12:24:00","modified_gmt":"2018-11-30T10:24:00","slug":"cyclic-dependency-directed-dependency","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html","title":{"rendered":"Converting a Cyclic Dependency into a Directed Dependency"},"content":{"rendered":"<p>So, this came out over a month late\u2026 Woops.<\/p>\n<p>This is definitely not my original idea in the least. I wish I knew where I originally found this so I could share that, but seeing that I can\u2019t find it and I haven\u2019t seen it anywhere else, I\u2019d like to share this idea so it can become more well-known.<\/p>\n<p>What is a cyclic dependency? It is one of mutual dependency, where one class depends on another that also depends on the first one, as shown below.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/1-1.png\"><img decoding=\"async\" class=\"aligncenter wp-image-84093 size-full\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/1-1.png\" alt=\"cyclic dependency\" width=\"400\" height=\"160\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/1-1.png 400w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/1-1-300x120.png 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n<p>There can also be more classes in between as shown below, where it just <i>eventually<\/i> circles back to the beginning.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/2.png\"><img decoding=\"async\" class=\"aligncenter wp-image-84094 size-full\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/2.png\" alt=\"cyclic dependency\" width=\"400\" height=\"400\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/2.png 400w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/2-150x150.png 150w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/2-300x300.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/2-70x70.png 70w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n<p>You probably know this, but in case you don\u2019t, you should know that you don\u2019t want these types of situations. They hurt the understandability of your system and make it harder for garbage collectors to clean them up when they\u2019re done. There are probably more reasons, too, but I\u2019ve never paid much attention to this, and it seems that as a whole, the community knows that they should avoid cyclic dependencies but doesn\u2019t do much to avoid it.<\/p>\n<p>Anyway, what you\u2019re looking for is a nice acyclic directed graph of dependencies as shown below, where all the arrows point down.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/3-1.png\"><img decoding=\"async\" class=\"aligncenter wp-image-84095 size-full\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/3-1.png\" alt=\"cyclic dependency\" width=\"400\" height=\"400\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/3-1.png 400w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/3-1-150x150.png 150w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/3-1-300x300.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/3-1-70x70.png 70w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n<p>So, how do we go from this<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/1-1-1.png\"><img decoding=\"async\" class=\"aligncenter wp-image-84096 size-full\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/1-1-1.png\" alt=\"cyclic dependency\" width=\"400\" height=\"160\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/1-1-1.png 400w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/1-1-1-300x120.png 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n<p>To an acyclic directed graph? What would that graph look like?<\/p>\n<p>Well, it would look like this!<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/5.png\"><img decoding=\"async\" class=\"aligncenter wp-image-84097 size-full\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/5.png\" alt=\"cyclic dependency\" width=\"400\" height=\"400\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/5.png 400w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/5-150x150.png 150w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/5-300x300.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/11\/5-70x70.png 70w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n<p>You take the part of the class that is depended on by the other class and extract it. Do this for both classes, and your problem is solved!<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>With these super vague graph images, it may be difficult to really see how this can <i>actually<\/i> be done, so I\u2019ll give you a really simple code example (written in Kotlin <i>and<\/i> Python!). It should help you get started when breaking apart your cyclic dependencies.<\/p>\n<pre class=\"brush:js\">class A {\r\n   var b: B? = null\r\n   var _observed: Int = 0\r\n   var observed: Int\r\n       get() = _observed\r\n       set(value) {\r\n           _observed = value\r\n           b?.alert()\r\n       }\r\n\r\n   fun alert(): Unit {\r\n       println(\"A.alert\")\r\n   }\r\n\r\n   fun doSomething(): Unit {\r\n       alert()\r\n   }\r\n}\r\n\r\nclass B {\r\n   var a: A? = null\r\n   var _observed: Int = 0\r\n   var observed: Int\r\n       get() = _observed\r\n       set(value) {\r\n           _observed = value\r\n           a?.alert()\r\n       }\r\n\r\n   fun alert(): Unit {\r\n       println(\"B.alert\")\r\n   }\r\n\r\n   fun doSomething(): Unit {\r\n       alert()\r\n   }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"brush:js\">class A:\r\n   def __init__(self):\r\n       self.b: B = None\r\n       self._observed: int = 0\r\n\r\n   @property\r\n   def observed(self):\r\n       return self._observed\r\n\r\n   @observed.setter\r\n   def observed(self, value):\r\n       self._observed = value\r\n       self.b.alert()\r\n\r\n   def alert(self):\r\n       print(\"A.alert\")\r\n\r\n   def doSomething(self):\r\n       self.alert()\r\n\r\nclass B:\r\n   def __init__(self):\r\n       self.a: A = None\r\n       self._observed: int = 0\r\n\r\n   @property\r\n   def observed(self):\r\n       return self._observed\r\n\r\n   @observed.setter\r\n   def observed(self, value):\r\n       self._observed = value\r\n       self.a.alert()\r\n\r\n   def alert(self):\r\n       print(\"B.alert\")\r\n\r\n   def doSomething(self):\r\n       self.alert()<\/pre>\n<p>The two classes are almost exactly the same, but that doesn\u2019t really matter. What matters is that the dependent parts can be extracted. What parts of type <code>B<\/code> does <code>A<\/code> depend on? And vice versa? Each class depends on the other\u2019s <code>alert()<\/code> method. So let\u2019s extract those out:<\/p>\n<pre class=\"brush:java\">class AAlerter {\r\n   fun alert(): Unit {\r\n       println(\"A.alert\")\r\n   }\r\n}\r\n\r\nclass BAlerter {\r\n   fun alert(): Unit {\r\n       println(\"B.alert\")\r\n   }\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"brush:java\">class AAlerter:\r\n   def alert(self):\r\n       print(\"A.alert\")\r\n\r\nclass BAlerter:\r\n   def alert(self):\r\n       print(\"B.alert\")<\/pre>\n<p>Now the other classes can depend on these<\/p>\n<pre class=\"brush:js\">class A (var a: AAlerter, var b: BAlerter) {\r\n   var _observed: Int = 0\r\n   var observed: Int\r\n       get() = _observed\r\n       set(value) {\r\n           _observed = value\r\n           b.alert()\r\n       }\r\n\r\n   fun doSomething(): Unit {\r\n       a.alert()\r\n   }\r\n}\r\n\r\nclass B (var a: AAlerter, var b: BAlerter){\r\n   var _observed: Int = 0\r\n   var observed: Int\r\n       get() = _observed\r\n       set(value) {\r\n           _observed = value\r\n           a.alert()\r\n       }\r\n\r\n   fun doSomething(): Unit {\r\n       b.alert()\r\n   }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"brush:java\">class A:\r\n   def __init__(self, a: AAlerter, b: BAlerter):\r\n       self.a = a\r\n       self.b = b\r\n       self._observed: int = 0\r\n\r\n   @property\r\n   def observed(self):\r\n       return self._observed\r\n\r\n   @observed.setter\r\n   def observed(self, value):\r\n       self._observed = value\r\n       self.b.alert()\r\n\r\n   def doSomething(self):\r\n       self.a.alert()\r\n\r\nclass B:\r\n   def __init__(self, a: AAlerter, b: BAlerter):\r\n       self.a = a\r\n       self.b = b\r\n       self._observed: int = 0\r\n\r\n   @property\r\n   def observed(self):\r\n       return self._observed\r\n\r\n   @observed.setter\r\n   def observed(self, value):\r\n       self._observed = value\r\n       self.a.alert()\r\n\r\n   def doSomething(self):\r\n       self.b.alert()<\/pre>\n<p>You may notice that, due to the cyclic dependencies, there was no way to create instances of the original classes without <code>null<\/code>\/<code>None<\/code> because each one would require an instance to exist in order to make it.<\/p>\n<p>Now, it\u2019s possible to create an instance where the constructor takes in all of the fields without any temporary <code>null<\/code>s\/<code>None<\/code>s.<\/p>\n<h2><b>Outro<\/b><\/h2>\n<p>As I said before, I realize that this is a super simple example, and I don\u2019t expect it to make you into experts on removing cyclic dependencies. What I do expect is that you now have your mind wrapped around the basics and can start trying to take apart some of these when you see them.<\/p>\n<p>I will admit that there is at least one \u201ckind\u201d of cyclic dependency that this doesn\u2019t fix: A child pointing back to its parent. For example, you have a <code>FilingCabinet<\/code> with a list of <code>File<\/code>s in it, and those <code>File<\/code>s also have a pointer back to the <code>FilingCabinet<\/code> they\u2019re in if you ever need a way to traverse back up the tree when you don\u2019t know the original already.<\/p>\n<p>The advice I\u2019ve seen on this is to lose the link going back to the parent and instead put in a method that does some kind of lookup to find the parent. This is silly; it still has the cyclic dependency; it\u2019s just that the dependency is either one step further removed (for a fully in-memory, in-language lookup) or is pulled into a different kind of system (for something like a database lookup).<\/p>\n<p>I recommend either trying to make it so that the code doesn\u2019t need to go back up the tree or that the parent is passed in along with the child, possibly in some sort of custom parent-child pair type.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>Published on Java Code Geeks with permission by Jacob Zimmerman, partner at our <a href=\"\/\/www.javacodegeeks.com\/join-us\/jcg\/\" target=\"_blank\" rel=\"noopener\">JCG program<\/a>. See the original article here: <a href=\"https:\/\/programmingideaswithjake.wordpress.com\/2018\/11\/27\/converting-a-cyclic-dependency-into-a-directed-dependency\/\" target=\"_blank\" rel=\"noopener\">Converting a Cyclic Dependency into a Directed Dependency<\/a><\/p>\n<p>Opinions expressed by Java Code Geeks contributors are their own.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>So, this came out over a month late\u2026 Woops. This is definitely not my original idea in the least. I wish I knew where I originally found this so I could share that, but seeing that I can\u2019t find it and I haven\u2019t seen it anywhere else, I\u2019d like to share this idea so it &hellip;<\/p>\n","protected":false},"author":842,"featured_media":219,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[785],"tags":[1417,224],"class_list":["post-84089","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kotlin","tag-oop","tag-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Converting a Cyclic Dependency into a Directed Dependency - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn about cyclic dependency? Check our article explaining how to convert a cyclic Dependency into a Directed Dependency\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Converting a Cyclic Dependency into a Directed Dependency - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about cyclic dependency? Check our article explaining how to convert a cyclic Dependency into a Directed Dependency\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2018-11-30T08:00:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-11-30T10:24:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/python-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jacob Zimmerman\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/jacobz_20\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jacob Zimmerman\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/cyclic-dependency-directed-dependency.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/cyclic-dependency-directed-dependency.html\"},\"author\":{\"name\":\"Jacob Zimmerman\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/b5691744bf9f142d52a0bd506614a67d\"},\"headline\":\"Converting a Cyclic Dependency into a Directed Dependency\",\"datePublished\":\"2018-11-30T08:00:06+00:00\",\"dateModified\":\"2018-11-30T10:24:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/cyclic-dependency-directed-dependency.html\"},\"wordCount\":718,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/cyclic-dependency-directed-dependency.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/python-logo.jpg\",\"keywords\":[\"OOP\",\"Python\"],\"articleSection\":[\"Kotlin\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/cyclic-dependency-directed-dependency.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/cyclic-dependency-directed-dependency.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/cyclic-dependency-directed-dependency.html\",\"name\":\"Converting a Cyclic Dependency into a Directed Dependency - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/cyclic-dependency-directed-dependency.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/cyclic-dependency-directed-dependency.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/python-logo.jpg\",\"datePublished\":\"2018-11-30T08:00:06+00:00\",\"dateModified\":\"2018-11-30T10:24:00+00:00\",\"description\":\"Interested to learn about cyclic dependency? Check our article explaining how to convert a cyclic Dependency into a Directed Dependency\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/cyclic-dependency-directed-dependency.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/cyclic-dependency-directed-dependency.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/cyclic-dependency-directed-dependency.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/python-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/python-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/11\\\/cyclic-dependency-directed-dependency.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JVM Languages\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/jvm-languages\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Kotlin\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/jvm-languages\\\/kotlin\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Converting a Cyclic Dependency into a Directed Dependency\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/b5691744bf9f142d52a0bd506614a67d\",\"name\":\"Jacob Zimmerman\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2dfdd9e2d35ed2224faf73968f8c597b5489fc345287e06e2571d3935a6bcc86?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2dfdd9e2d35ed2224faf73968f8c597b5489fc345287e06e2571d3935a6bcc86?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2dfdd9e2d35ed2224faf73968f8c597b5489fc345287e06e2571d3935a6bcc86?s=96&d=mm&r=g\",\"caption\":\"Jacob Zimmerman\"},\"description\":\"Jacob is a certified Java programmer (level 1) and Python enthusiast. He loves to solve large problems with programming and considers himself pretty good at design.\",\"sameAs\":[\"https:\\\/\\\/programmingideaswithjake.wordpress.com\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/jacobz_20\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/jacob-zimmerman\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Converting a Cyclic Dependency into a Directed Dependency - Java Code Geeks","description":"Interested to learn about cyclic dependency? Check our article explaining how to convert a cyclic Dependency into a Directed Dependency","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:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html","og_locale":"en_US","og_type":"article","og_title":"Converting a Cyclic Dependency into a Directed Dependency - Java Code Geeks","og_description":"Interested to learn about cyclic dependency? Check our article explaining how to convert a cyclic Dependency into a Directed Dependency","og_url":"https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2018-11-30T08:00:06+00:00","article_modified_time":"2018-11-30T10:24:00+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/python-logo.jpg","type":"image\/jpeg"}],"author":"Jacob Zimmerman","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/jacobz_20","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Jacob Zimmerman","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html"},"author":{"name":"Jacob Zimmerman","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/b5691744bf9f142d52a0bd506614a67d"},"headline":"Converting a Cyclic Dependency into a Directed Dependency","datePublished":"2018-11-30T08:00:06+00:00","dateModified":"2018-11-30T10:24:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html"},"wordCount":718,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/python-logo.jpg","keywords":["OOP","Python"],"articleSection":["Kotlin"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html","url":"https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html","name":"Converting a Cyclic Dependency into a Directed Dependency - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/python-logo.jpg","datePublished":"2018-11-30T08:00:06+00:00","dateModified":"2018-11-30T10:24:00+00:00","description":"Interested to learn about cyclic dependency? Check our article explaining how to convert a cyclic Dependency into a Directed Dependency","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/python-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/python-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2018\/11\/cyclic-dependency-directed-dependency.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"JVM Languages","item":"https:\/\/www.javacodegeeks.com\/category\/jvm-languages"},{"@type":"ListItem","position":3,"name":"Kotlin","item":"https:\/\/www.javacodegeeks.com\/category\/jvm-languages\/kotlin"},{"@type":"ListItem","position":4,"name":"Converting a Cyclic Dependency into a Directed Dependency"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/b5691744bf9f142d52a0bd506614a67d","name":"Jacob Zimmerman","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/2dfdd9e2d35ed2224faf73968f8c597b5489fc345287e06e2571d3935a6bcc86?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2dfdd9e2d35ed2224faf73968f8c597b5489fc345287e06e2571d3935a6bcc86?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2dfdd9e2d35ed2224faf73968f8c597b5489fc345287e06e2571d3935a6bcc86?s=96&d=mm&r=g","caption":"Jacob Zimmerman"},"description":"Jacob is a certified Java programmer (level 1) and Python enthusiast. He loves to solve large problems with programming and considers himself pretty good at design.","sameAs":["https:\/\/programmingideaswithjake.wordpress.com\/","https:\/\/x.com\/https:\/\/twitter.com\/jacobz_20"],"url":"https:\/\/www.javacodegeeks.com\/author\/jacob-zimmerman"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/84089","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/842"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=84089"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/84089\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/219"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=84089"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=84089"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=84089"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}