{"id":29322,"date":"2024-09-26T14:20:37","date_gmt":"2024-09-26T12:20:37","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=29322"},"modified":"2024-09-26T14:20:39","modified_gmt":"2024-09-26T12:20:39","slug":"un-limite-dei-tipi-generici-in-java","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/","title":{"rendered":"Un limite dei tipi generici in Java"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"h-problema\">Problema<\/h2>\n\n\n\n<p>Si considerino la seguente classe Person e le classi figlie Manager e Employee definite come segue:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    <span class=\"hljs-built_in\">String<\/span> name;\n    public Person(<span class=\"hljs-built_in\">String<\/span> name) { <span class=\"hljs-keyword\">this<\/span>.name = name; }\n}\n\npublic <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Manager<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Person<\/span><\/span>{\n    public Manager(<span class=\"hljs-built_in\">String<\/span> name) { <span class=\"hljs-keyword\">super<\/span>(name); }\n}\n\npublic <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Person<\/span><\/span>{\n   public Employee(<span class=\"hljs-built_in\">String<\/span> name) { <span class=\"hljs-keyword\">super<\/span>(name); }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Si consideri ora un generico metodo statico che accetta due parametri di un tipo generico T e ritorna un oggetto di tipo T . Al tipo T viene inserito il vincolo &lt;T extends Person&gt; ossia il tipo T dovr\u00e0 possedere ALMENO ciascuno degli attributi e dei metodi di person.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> T foo(T t1, T t2){\n    <span class=\"hljs-comment\">\/\/Do something<\/span>\n    <span class=\"hljs-keyword\">return<\/span> \u2026\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Si supponga di definire le seguenti istanze p1 e p2  e di effettuare la seguente invocazione del metodo foo() :<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Employee p1 = <span class=\"hljs-keyword\">new<\/span> Employee(<span class=\"hljs-string\">\"John\"<\/span>);\nManager p2 = <span class=\"hljs-keyword\">new<\/span> Manager(<span class=\"hljs-string\">\"Johanna\"<\/span>);\n\nPerson out = foo(p1, p2);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<pre class=\"wp-block-preformatted\"><strong>Si vuole ora imporre che entrambi i parametri passati al metodo foo() siano dello stesso tipo facendo in modo che il compilatore segnali un errore in caso contrario.<\/strong><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-osservazione\">Osservazione<\/h4>\n\n\n\n<p>Eseguendo l&#8217;invocazione del metodo sopra riportata NON viene generato alcun errore di compilazione in quanto sia p1 (di tipo Employee) che p2 (di tipo Manager) rispettano i vincoli imposti dal tipo generico T (infatti essi possiedo entrambi gli attributi di Person).<\/p>\n\n\n\n<p>Per comprendere al meglio il problema \u00e8 necessario analizzare i meccanismi di compilazione e precompilazione del codice.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-il-ruolo-del-type-erasure\">Il ruolo del type erasure<\/h2>\n\n\n\n<p>Il <strong>type erasure<\/strong> \u00e8 il meccanismo di precompilazione che provvede a rimpiazzare tutti i tipi generici con il tipo di oggetto con maggior compatibilit\u00e0 (rispettando eventuali limitazioni poste).<\/p>\n\n\n\n<p>Nel caso in esame, poich\u00e9 viene fissato il vincolo &lt;T extends Person&gt;, il tipo generico T sar\u00e0 rimpiazzato con il tipo di oggetto in grado di garantire la miglior compatibilit\u00e0 e di rispettare le limitazioni imposte. Si otterr\u00e0 perci\u00f2:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> Person foo(Person t1, Person t2){\n    <span class=\"hljs-comment\">\/\/Do something<\/span>\n    <span class=\"hljs-keyword\">return<\/span> \u2026\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Risulta quindi chiaro come, effettuando l&#8217;invocazione proposta sopra, sia p1 che p2 siano accettati dal compilatore, in quanto entrambi &#8220;discendenti&#8221; di Person.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-type-inference\">Type inference<\/h4>\n\n\n\n<p>In caso vengano passati come parametri di foo() istanze di oggetti dello stesso tipo entra in gioco il ruolo del <strong>meccanismo di type inference<\/strong> che provvede ad utilizzare come tipo di compilazione la sotto-classe delle istanze passate come argomenti.<\/p>\n\n\n\n<p>Nel caso in oggetto essendo entrambe le classi, Employee e Manager, figlie dirette di Person, la classe pi\u00f9 adatta da utilizzare al momento della compilazione sar\u00e0 Person.<\/p>\n\n\n\n<p>In caso venissero passate al metodo due istanze di Manager, la classe pi\u00f9 adatta da  utilizzare al momento della compilazione sar\u00e0 Manager.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-possibili-soluzioni-al-problema\">Possibili soluzioni al problema<\/h2>\n\n\n\n<p>Alla luce di quanto osservato finora sembra di aver rilevato un <strong>limite imposto dai tipi generici<\/strong>: nel caso vengano passati ad un metodo due istanze di tipo generico T limitato tramite la sintassi &lt;T extends C&gt;, se le istanze passate come parametri del metodo sono entrambe sotto-classi di C non \u00e8 possibile produrre errori in compile-time in caso le istanze passate come parametri siano di tipi differenti.<\/p>\n\n\n\n<p>Sono illustrati di seguito possibili soluzioni alternative al problema.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-soluzione-alternativa-1-classe-ausiliaria\">Soluzione alternativa 1 &#8211; <em>Classe ausiliaria<\/em><\/h3>\n\n\n\n<p>Nel caso si conosca il numero di parametri dello stesso tipo da passare al metodo, definire un classe con tipo generico che accetti i vari oggetti e venga successivamente passata come unico parametro del metodo foo().<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">\/\/New class with two same-type objects<\/span>\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Pair<\/span>&lt;<span class=\"hljs-title\">P<\/span>&gt;<\/span>{\n    <span class=\"hljs-keyword\">private<\/span> P first;\n    <span class=\"hljs-keyword\">private<\/span> P second;\n    <span class=\"hljs-keyword\">public<\/span> Pair(P first, P second) {\n        this.first = first;\n        this.second = second;\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> P getFirst() {\n        <span class=\"hljs-keyword\">return<\/span> first;\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> P getSecond() {\n        <span class=\"hljs-keyword\">return<\/span> second;\n    }\n}\n\n<span class=\"hljs-comment\">\/\/New foo definition<\/span>\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> &lt;T extends Person&gt; T foo(Pair&lt;T&gt; pair){\n    <span class=\"hljs-comment\">\/\/Do something<\/span>\n    <span class=\"hljs-keyword\">return<\/span> ...\n}\n\nEmployee p1 = <span class=\"hljs-keyword\">new<\/span> Employee(<span class=\"hljs-string\">\"John\"<\/span>);\nEmployee p2 = <span class=\"hljs-keyword\">new<\/span> Employee(<span class=\"hljs-string\">\"Francis\"<\/span>);\nManager p3 = <span class=\"hljs-keyword\">new<\/span> Manager(<span class=\"hljs-string\">\"Johanna\"<\/span>);\n\n<span class=\"hljs-comment\">\/\/Accepted<\/span>\nPair&lt;Employee&gt; pair = <span class=\"hljs-keyword\">new<\/span> Pair&lt;&gt;(p1, p2);\nPerson out = foo(pair);\n\n<span class=\"hljs-comment\">\/\/Compile error (p1 e p3 are different types)<\/span>\nPair&lt;Employee&gt; pair2 = <span class=\"hljs-keyword\">new<\/span> Pair&lt;&gt;(p1, p3);\nPerson out = foo(pair2);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-soluzione-alternativa-2-verifica-in-run-time\">Soluzione alternativa 2 &#8211; <em>Verifica in run-time<\/em><\/h3>\n\n\n\n<p>Tramite l&#8217;utilizzo del metodo getClass() \u00e8 possibile verificare a run-time se i parametri passati sono istanze di oggetti dello stesso tipo:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> &lt;T extends Person&gt; T my_method(T t1, T t2){\n    <span class=\"hljs-keyword\">if<\/span>(t1.getClass() != t2.getClass()){\n        <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> IllegalArgumentException(<span class=\"hljs-string\">\"Different type arguments\"<\/span>);\n    }\n\n    <span class=\"hljs-comment\">\/\/Do something<\/span>\n    <span class=\"hljs-keyword\">return<\/span> ...\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>","protected":false},"excerpt":{"rendered":"<p>Problema Si considerino la seguente classe Person e le classi figlie Manager e Employee definite come segue: Si consideri ora un generico metodo statico che accetta due parametri di un tipo generico T e ritorna un oggetto di tipo T . Al tipo T viene inserito il vincolo &lt;T extends Person&gt; ossia il tipo T&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/\">Read more<\/a><\/p>\n","protected":false},"author":264,"featured_media":20194,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10230],"tags":[12595],"collections":[11708],"class_list":{"0":"post-29322","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-linguaggi-programmazione","8":"tag-tipi-generici","9":"collections-dalla-community","10":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Un limite dei tipi generici in Java - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"In questo articolo, esploriamo uno dei possibili limiti che si possono incontrare durante l&#039;utilizzo di tipi generici in Java.\" \/>\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.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Un limite dei tipi generici in Java\" \/>\n<meta property=\"og:description\" content=\"In questo articolo, esploriamo uno dei possibili limiti che si possono incontrare durante l&#039;utilizzo di tipi generici in Java.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-09-26T12:20:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-26T12:20:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1254\" \/>\n\t<meta property=\"og:image:height\" content=\"836\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Fabrizio Tedeschi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fabrizio Tedeschi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/\"},\"author\":{\"name\":\"Fabrizio Tedeschi\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/902dc65e0de8be950fb33d9af4fae7f3\"},\"headline\":\"Un limite dei tipi generici in Java\",\"datePublished\":\"2024-09-26T12:20:37+00:00\",\"dateModified\":\"2024-09-26T12:20:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/\"},\"wordCount\":484,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low.jpg\",\"keywords\":[\"tipi generici\"],\"articleSection\":[\"Linguaggi di programmazione\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/\",\"name\":\"Un limite dei tipi generici in Java - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low.jpg\",\"datePublished\":\"2024-09-26T12:20:37+00:00\",\"dateModified\":\"2024-09-26T12:20:39+00:00\",\"description\":\"In questo articolo, esploriamo uno dei possibili limiti che si possono incontrare durante l'utilizzo di tipi generici in Java.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low.jpg\",\"width\":1254,\"height\":836,\"caption\":\"The puzzle pieces are assembled into the word Java, a programming language and application creation, a concept. Mosaic on the computer keyboard, blue background\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Linguaggi di programmazione\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Un limite dei tipi generici in Java\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/902dc65e0de8be950fb33d9af4fae7f3\",\"name\":\"Fabrizio Tedeschi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/08\/IMG_9703-min-100x100.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/08\/IMG_9703-min-100x100.jpg\",\"caption\":\"Fabrizio Tedeschi\"},\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/fabriziot\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Un limite dei tipi generici in Java - Codemotion Magazine","description":"In questo articolo, esploriamo uno dei possibili limiti che si possono incontrare durante l'utilizzo di tipi generici in Java.","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.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/","og_locale":"en_US","og_type":"article","og_title":"Un limite dei tipi generici in Java","og_description":"In questo articolo, esploriamo uno dei possibili limiti che si possono incontrare durante l'utilizzo di tipi generici in Java.","og_url":"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2024-09-26T12:20:37+00:00","article_modified_time":"2024-09-26T12:20:39+00:00","og_image":[{"width":1254,"height":836,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low.jpg","type":"image\/jpeg"}],"author":"Fabrizio Tedeschi","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Fabrizio Tedeschi","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/"},"author":{"name":"Fabrizio Tedeschi","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/902dc65e0de8be950fb33d9af4fae7f3"},"headline":"Un limite dei tipi generici in Java","datePublished":"2024-09-26T12:20:37+00:00","dateModified":"2024-09-26T12:20:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/"},"wordCount":484,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low.jpg","keywords":["tipi generici"],"articleSection":["Linguaggi di programmazione"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/","url":"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/","name":"Un limite dei tipi generici in Java - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low.jpg","datePublished":"2024-09-26T12:20:37+00:00","dateModified":"2024-09-26T12:20:39+00:00","description":"In questo articolo, esploriamo uno dei possibili limiti che si possono incontrare durante l'utilizzo di tipi generici in Java.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low.jpg","width":1254,"height":836,"caption":"The puzzle pieces are assembled into the word Java, a programming language and application creation, a concept. Mosaic on the computer keyboard, blue background"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/un-limite-dei-tipi-generici-in-java\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Linguaggi di programmazione","item":"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/"},{"@type":"ListItem","position":3,"name":"Un limite dei tipi generici in Java"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/902dc65e0de8be950fb33d9af4fae7f3","name":"Fabrizio Tedeschi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/08\/IMG_9703-min-100x100.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/08\/IMG_9703-min-100x100.jpg","caption":"Fabrizio Tedeschi"},"url":"https:\/\/www.codemotion.com\/magazine\/author\/fabriziot\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low-600x600.jpg","author_info":{"display_name":"Fabrizio Tedeschi","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/fabriziot\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low.jpg",1254,836,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low-300x200.jpg",300,200,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low-768x512.jpg",768,512,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low-1024x683.jpg",1024,683,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low.jpg",1254,836,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low.jpg",1254,836,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low.jpg",100,67,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/02\/java-web-low-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Fabrizio Tedeschi","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/fabriziot\/"},"uagb_comment_info":0,"uagb_excerpt":"Problema Si considerino la seguente classe Person e le classi figlie Manager e Employee definite come segue: Si consideri ora un generico metodo statico che accetta due parametri di un tipo generico T e ritorna un oggetto di tipo T . Al tipo T viene inserito il vincolo &lt;T extends Person&gt; ossia il tipo T&#8230;&hellip;","lang":"it","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/29322","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/264"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=29322"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/29322\/revisions"}],"predecessor-version":[{"id":29862,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/29322\/revisions\/29862"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/20194"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=29322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=29322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=29322"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=29322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}