{"id":19944725,"url":"https://github.com/rameshmf/java-generics-guide","last_synced_at":"2025-05-03T16:31:28.306Z","repository":{"id":99532460,"uuid":"144703567","full_name":"RameshMF/java-generics-guide","owner":"RameshMF","description":"Guide to Java Generics","archived":false,"fork":false,"pushed_at":"2018-08-23T05:31:23.000Z","size":27,"stargazers_count":13,"open_issues_count":0,"forks_count":17,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-07T18:24:10.622Z","etag":null,"topics":["generic","generic-methods","java-generics","java-generics-guide","java-generics-wildcards"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RameshMF.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-08-14T10:12:20.000Z","updated_at":"2023-05-29T19:36:34.000Z","dependencies_parsed_at":"2023-07-30T21:16:34.813Z","dependency_job_id":null,"html_url":"https://github.com/RameshMF/java-generics-guide","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RameshMF%2Fjava-generics-guide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RameshMF%2Fjava-generics-guide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RameshMF%2Fjava-generics-guide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RameshMF%2Fjava-generics-guide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RameshMF","download_url":"https://codeload.github.com/RameshMF/java-generics-guide/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252216090,"owners_count":21713098,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["generic","generic-methods","java-generics","java-generics-guide","java-generics-wildcards"],"created_at":"2024-11-13T00:22:35.294Z","updated_at":"2025-05-03T16:31:28.288Z","avatar_url":"https://github.com/RameshMF.png","language":"Java","readme":"\u003cdiv dir=\"ltr\" style=\"text-align: left;\" trbidi=\"on\"\u003e\n\u003ch2 style=\"text-align: left;\"\u003e\n\u003cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003e\n\u003ca href=\"https://1.bp.blogspot.com/-_yYj47VKFSE/W3kucNVtTDI/AAAAAAAADQo/3X3p2H-u3fY1x7D7iDf1zNNd75SN8lxWQCLcBGAs/s1600/java-generics-guide.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003e\u003cimg border=\"0\" data-original-height=\"280\" data-original-width=\"383\" height=\"233\" src=\"https://1.bp.blogspot.com/-_yYj47VKFSE/W3kucNVtTDI/AAAAAAAADQo/3X3p2H-u3fY1x7D7iDf1zNNd75SN8lxWQCLcBGAs/s320/java-generics-guide.png\" width=\"320\"\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\n\u003cspan style=\"font-family: \u0026quot;verdana\u0026quot; , sans-serif;\"\u003e\u003cspan style=\"background-color: white; color: #24292e; font-size: 16px; font-weight: 400;\"\u003eGenerics were added in Java 5 to provide compile-time type checking and removing the risk of\u0026nbsp;\u003c/span\u003e\u003cem style=\"background-color: white; box-sizing: border-box; color: #24292e; font-size: 16px; font-weight: 400;\"\u003eClassCastException\u003c/em\u003e\u003cspan style=\"background-color: white; color: #24292e; font-size: 16px; font-weight: 400;\"\u003e\u0026nbsp;that was common while working with collection classes.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\n\u003cspan style=\"background-color: white; color: #24292e; font-size: 16px; font-weight: 400;\"\u003e\u003cspan style=\"font-family: \u0026quot;verdana\u0026quot; , sans-serif;\"\u003e\u003cbr\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\n\u003cspan style=\"font-family: \u0026quot;verdana\u0026quot; , sans-serif;\"\u003eJava Generics Guide\u003c/span\u003e\u003c/h2\u003e\n\u003ca href=\"http://www.javaguides.net/2018/08/java-generics-guide.html\" target=\"_blank\"\u003e\u003cspan style=\"font-family: \u0026quot;verdana\u0026quot; , sans-serif;\"\u003eJava Generics - Generics Basics\u003c/span\u003e\u003c/a\u003e\u003cbr\u003e\n\u003cdiv\u003e\n\u003ca href=\"http://www.javaguides.net/2018/08/java-generics-guide.html#benefits-of-generics\" target=\"_blank\"\u003e\u003cspan style=\"font-family: \u0026quot;verdana\u0026quot; , sans-serif;\"\u003eJava Generics - Benefits of Generics\u003c/span\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv\u003e\n\u003ca href=\"http://www.javaguides.net/2018/08/java-generics-guide.html#generic-types\" target=\"_blank\"\u003e\u003cspan style=\"font-family: \u0026quot;verdana\u0026quot; , sans-serif;\"\u003eJava Generics - Generic Types\u003c/span\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv\u003e\n\u003ca href=\"http://www.javaguides.net/2018/08/generics-methods-in-java.html\" target=\"_blank\"\u003e\u003cspan style=\"font-family: \u0026quot;verdana\u0026quot; , sans-serif;\"\u003eJava Generics - Generic Methods in Java\u003c/span\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv\u003e\n\u003ca href=\"http://www.javaguides.net/2018/08/java-generics-bounded-type-parameters.html\" target=\"_blank\"\u003e\u003cspan style=\"font-family: \u0026quot;verdana\u0026quot; , sans-serif;\"\u003eJava Generics - Bounded Type Parameters\u003c/span\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv\u003e\n\u003ca href=\"http://www.javaguides.net/2018/08/java-generics-wildcards.html\" target=\"_blank\"\u003e\u003cspan style=\"font-family: \u0026quot;verdana\u0026quot; , sans-serif;\"\u003eJava Generics - Wildcards\u003c/span\u003e\u003c/a\u003e\u003c/div\u003e\n\u003ch2 style=\"text-align: left;\"\u003e\n\u003cspan style=\"font-family: \u0026quot;verdana\u0026quot; , sans-serif;\"\u003eJava Generics Examples\u003c/span\u003e\u003c/h2\u003e\n\u003cdiv\u003e\n\u003cspan style=\"font-family: \u0026quot;verdana\u0026quot; , sans-serif;\"\u003e\u003ca href=\"http://www.javaguides.net/2018/08/java-generic-methods-examples.html\" target=\"_blank\"\u003eJava Generic Methods Examples\u003c/a\u003e\u003c/span\u003e\u003cbr\u003e\n\u003cspan style=\"font-family: \u0026quot;verdana\u0026quot; , sans-serif;\"\u003e\u003ca href=\"http://www.javaguides.net/2018/08/java-generic-interface-examples.html\" target=\"_blank\"\u003eJava Generic Interface Examples\u003c/a\u003e\u003c/span\u003e\u003cbr\u003e\n\u003cspan style=\"font-family: \u0026quot;verdana\u0026quot; , sans-serif;\"\u003e\u003ca href=\"http://www.javaguides.net/2018/08/java-generic-class-examples.html\" target=\"_blank\"\u003eJava Generic Class Examples\u003c/a\u003e\u003c/span\u003e\u003cbr\u003e\n\u003ca href=\"http://www.javaguides.net/2018/08/java-generics-multiple-type-parameters-example.html\" target=\"_blank\"\u003e\u003cspan style=\"font-family: \u0026quot;verdana\u0026quot; , sans-serif;\"\u003eJava Generics Multiple Type Parameters Example\u003c/span\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv\u003e\n\u003cspan style=\"font-family: Verdana, sans-serif;\"\u003e\u003ca href=\"http://www.javaguides.net/2018/08/java-generics-wildcards-example.html\" target=\"_blank\"\u003eJava Generics Wildcards Example\u003c/a\u003e\u003c/span\u003e\u003cbr\u003e\n\u003cspan style=\"font-family: Verdana, sans-serif;\"\u003e\u003ca href=\"http://www.javaguides.net/2018/08/java-generics-upper-bounded-wildcards.html\" target=\"_blank\"\u003eJava Generics Upper Bounded Wildcards Example\u003c/a\u003e\u003c/span\u003e\u003cbr\u003e\n\u003ca href=\"http://www.javaguides.net/2018/08/java-generics-lower-bounded-wildcards.html\" target=\"_blank\"\u003e\u003cspan style=\"font-family: Verdana, sans-serif;\"\u003eJava Generics Lower Bounded Wildcards Example\u003c/span\u003e\u003c/a\u003e\u003c/div\u003e\n\u003c/div\u003e\n\nSINCE Java 5, generics have been a part of the language. Before generics, you had to cast every object you read from a collection. If someone accidentally inserted an object of the wrong type, casts could fail at runtime. With generics, you tell the compiler what types of objects are permitted in each collection. The compiler inserts casts for you automatically and tells you at compile time if you try to insert an object of the wrong type. This results in programs that are both safer and clearer, but these benefits, which are not limited to collections, come at a price. This chapter tells you how to maximize the benefits and minimize the complications.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frameshmf%2Fjava-generics-guide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frameshmf%2Fjava-generics-guide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frameshmf%2Fjava-generics-guide/lists"}