<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=434301&amp;view=findpost&amp;p=3889896</guid>
        <pubDate>Mon, 24 Apr 2023 09:45:00 +0000</pubDate>
        <title>Как из дженерика получить Class?</title>
        <link>https://forum.sources.ru/index.php?showtopic=434301&amp;view=findpost&amp;p=3889896</link>
        <description><![CDATA[Leklerk: Здравствуйте&#33; Спасибо за ответ. Но я протестировал - даже если для класса DataTemplateJdbc&lt;T&gt; сделать родителя (например, Parent&lt;T&gt;), в момент преобразования в Class&lt;T&gt; получается ошибка &quot;class sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to class java.lang.Class&quot;. А если без родителя, то ошибка &quot;class java.lang.Class cannot be cast to class java.lang.reflect.ParameterizedType&quot;.]]></description>
        <author>Leklerk</author>
        <category>Java</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=434301&amp;view=findpost&amp;p=3889540</guid>
        <pubDate>Mon, 17 Apr 2023 05:16:46 +0000</pubDate>
        <title>Как из дженерика получить Class?</title>
        <link>https://forum.sources.ru/index.php?showtopic=434301&amp;view=findpost&amp;p=3889540</link>
        <description><![CDATA[MaIron: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=434301&view=findpost&p=3889320'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Leklerk &#064; <time class="tag-quote__quoted-time" datetime="2023-04-10T20:01:07+00:00">10.04.23, 20:01</time></span><div class='quote '>Добрый день&#33; Есть класс DataTemplateJdbc&lt;T&gt;, нужно внутри него (например, в конструкторе) получить Class для типа &lt;T&gt;. Подскажите пожалуйста, как это сделать (и можно ли)?</div></div><br>
В Java возможно получить объект типа Class для параметра типа &lt;T&gt; внутри обобщенного класса DataTemplateJdbc&lt;T&gt;. Для этого можно использовать механизм рефлексии.<br>
Вот пример, как это можно сделать:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">public class DataTemplateJdbc&#60;T&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp;private Class&#60;T&#62; clazz;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public DataTemplateJdbc() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Получаем объект типа Class для параметра типа &#60;T&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// С помощью getClass() на объекте типа T и получения его класса</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;this.clazz = (Class&#60;T&#62;) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Другие методы и конструкторы класса DataTemplateJdbc&#60;T&#62;...</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public void printClassForT() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;System.out.println(&quot;Class for T: &quot; + clazz.getName());</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
В этом примере, в конструкторе класса DataTemplateJdbc&lt;T&gt;, мы используем метод getClass() для получения объекта Class текущего объекта типа T, а затем с помощью методов рефлексии getGenericSuperclass() и getActualTypeArguments() извлекаем фактический параметр типа &lt;T&gt; для класса DataTemplateJdbc&lt;T&gt;. Обратите внимание, что использование getGenericSuperclass() и getActualTypeArguments() предполагает, что класс DataTemplateJdbc&lt;T&gt; будет наследоваться от другого класса или расширять другой обобщенный класс, иначе, этот подход может не сработать.<br>
<br>
Примечание: Необходимо быть осторожным при использовании рефлексии, так как она может быть сложна в поддержке и потенциально опасна. Рассматривайте альтернативные подходы, если возможно, перед использованием рефлексии в своем коде.]]></description>
        <author>MaIron</author>
        <category>Java</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=434301&amp;view=findpost&amp;p=3889437</guid>
        <pubDate>Thu, 13 Apr 2023 08:41:59 +0000</pubDate>
        <title>Как из дженерика получить Class?</title>
        <link>https://forum.sources.ru/index.php?showtopic=434301&amp;view=findpost&amp;p=3889437</link>
        <description><![CDATA[Leklerk: Спасибо&#33;]]></description>
        <author>Leklerk</author>
        <category>Java</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=434301&amp;view=findpost&amp;p=3889405</guid>
        <pubDate>Wed, 12 Apr 2023 11:28:58 +0000</pubDate>
        <title>Как из дженерика получить Class?</title>
        <link>https://forum.sources.ru/index.php?showtopic=434301&amp;view=findpost&amp;p=3889405</link>
        <description><![CDATA[kopilov: Напрямую невозможно (значение T стирается после компиляции). Если есть параметр, имеющий тип T с ненулевым значением — можно вытащить из него через рефлексию (но это может быть тип-наследник).<br>
<br>
К слову (извините, если не по теме), в Kotlin это сделать можно: <a class='tag-url' href='https://stackoverflow.com/questions/45949584/how-does-the-reified-keyword-in-kotlin-work' target='_blank'>https://stackoverflow.com/questions/4594958...-in-kotlin-work</a>]]></description>
        <author>kopilov</author>
        <category>Java</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=434301&amp;view=findpost&amp;p=3889320</guid>
        <pubDate>Mon, 10 Apr 2023 20:01:07 +0000</pubDate>
        <title>Как из дженерика получить Class?</title>
        <link>https://forum.sources.ru/index.php?showtopic=434301&amp;view=findpost&amp;p=3889320</link>
        <description><![CDATA[Leklerk: Добрый день&#33; Есть класс DataTemplateJdbc&lt;T&gt;, нужно внутри него (например, в конструкторе) получить Class для типа &lt;T&gt;. Подскажите пожалуйста, как это сделать (и можно ли)?]]></description>
        <author>Leklerk</author>
        <category>Java</category>
      </item>
	
      </channel>
      </rss>
	