天天看點

Java – 擷取類中特定資料類型的字段

一些java反射api的例子。

1.顯示所有字段和資料類型

使用反射周遊一個類聲明的所有字段。

<code>01</code>

<code>package</code> <code>com.mkyong.test;</code>

<code>02</code>

<code>03</code>

<code>import</code> <code>java.util.list;</code>

<code>04</code>

<code>import</code> <code>java.util.map;</code>

<code>05</code>

<code>import</code> <code>java.util.set;</code>

<code>06</code>

<code>07</code>

<code>public</code> <code>class</code> <code>companya {</code>

<code>08</code>

<code>09</code>

<code>    </code><code>string orgname;</code>

<code>10</code>

<code>    </code><code>int</code> <code>count;</code>

<code>11</code>

<code>    </code><code>list&lt;string&gt; comments;</code>

<code>12</code>

<code>    </code><code>set&lt;string&gt; branches;</code>

<code>13</code>

<code>    </code><code>map&lt;string, string&gt; extra;</code>

<code>14</code>

<code>15</code>

<code>    </code><code>//...</code>

<code>16</code>

<code>}</code>

使用java反射apis getdeclaredfields()去周遊和列印字段名和資料類型。

<code>import</code> <code>java.lang.reflect.field;</code>

<code>public</code> <code>class</code> <code>test {</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>main(string[] args) {</code>

<code>        </code><code>field[] fields = companya.</code><code>class</code><code>.getdeclaredfields();</code>

<code>        </code><code>for</code><code>(field f : fields){</code>

<code>            </code><code>class t = f.gettype();</code>

<code>            </code><code>system.out.println(</code><code>"field name : "</code> <code>+ f.getname() + </code><code>" , type : "</code> <code>+ t);</code>

<code>        </code><code>}</code>

<code>    </code><code>}</code>

<code>17</code>

<code>18</code>

輸出

<code>1</code>

<code>field name : orgname , type :</code><code>class</code> <code>java.lang.string</code>

<code>2</code>

<code>field name : count , type :</code><code>int</code>

<code>3</code>

<code>field name : comments , type :</code><code>interface</code> <code>java.util.list</code>

<code>4</code>

<code>field name : branches , type :</code><code>interface</code> <code>java.util.set</code>

<code>5</code>

<code>field name : extra , type :</code><code>interface</code> <code>java.util.map</code>

2.擷取指定資料類型的字段

下面的例子會擷取所有list類型的字段。

<code>import</code> <code>java.util.arraylist;</code>

<code>public</code> <code>class</code> <code>testabc {</code>

<code>        </code><code>list&lt;string&gt; list = getfieldnamewithlistdatatype();</code>

<code>        </code><code>for</code><code>(string data : list){</code>

<code>            </code><code>system.out.println(</code><code>"list : "</code> <code>+ data);</code>

<code>    </code><code>private</code> <code>static</code> <code>list&lt;string&gt; getfieldnamewithlistdatatype(){</code>

<code>19</code>

<code>20</code>

<code>        </code><code>list&lt;string&gt; result = </code><code>new</code> <code>arraylist&lt;&gt;();</code>

<code>21</code>

<code>22</code>

<code>        </code><code>//companya, refer 1.1</code>

<code>23</code>

<code>24</code>

<code>25</code>

<code>26</code>

<code>            </code><code>// use equals to compare the data type.</code>

<code>27</code>

<code>            </code><code>if</code><code>(f.gettype().equals(list.</code><code>class</code><code>)){</code>

<code>28</code>

<code>                </code><code>result.add(f.getname());</code>

<code>29</code>

<code>            </code><code>}</code>

<code>30</code>

<code>31</code>

<code>            </code><code>//for other data type</code>

<code>32</code>

<code>33</code>

<code>            </code><code>//map</code>

<code>34</code>

<code>            </code><code>//if(f.gettype().equals(map.class))</code>

<code>35</code>

<code>36</code>

<code>            </code><code>//set</code>

<code>37</code>

<code>            </code><code>//if(f.gettype().equals(set.class))</code>

<code>38</code>

<code>39</code>

<code>            </code><code>//primitive int</code>

<code>40</code>

<code>            </code><code>//if(f.gettype().equals(int.class))</code>

<code>41</code>

<code>            </code><code>//if(f.gettype().equals(integer.type))</code>

<code>42</code>

<code>43</code>

<code>            </code><code>//primitive long</code>

<code>44</code>

<code>            </code><code>//if(f.gettype().equals(long.class))</code>

<code>45</code>

<code>            </code><code>//if(f.gettype().equals(long.type))</code>

<code>46</code>

<code>47</code>

<code>48</code>

<code>49</code>

<code>        </code><code>return</code> <code>result;</code>

<code>50</code>

<code>51</code>

<code>52</code>

<code>53</code>

<code>comments</code>

note

對于一些基本資料類型像int,你可以對比一下使用int.class或integer.type。

references