一些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<string> comments;</code>
<code>12</code>
<code> </code><code>set<string> branches;</code>
<code>13</code>
<code> </code><code>map<string, string> 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<string> 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<string> getfieldnamewithlistdatatype(){</code>
<code>19</code>
<code>20</code>
<code> </code><code>list<string> result = </code><code>new</code> <code>arraylist<>();</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