日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java将属性练成字符串,Java中通过属性字符串名取属性内容

發布時間:2025/3/12 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java将属性练成字符串,Java中通过属性字符串名取属性内容 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Android開發當中資源的獲取其實是間接通過R文件進行的,這個R文件就相當于是一個地址列表,存放著每個資源的地址

那么如何快速高效的獲取就是這篇文章要分析的問題

假設我們有一個圖片資源叫btn_bg

那么將一個按鈕背景設置為這個圖片的方式就是

btn.setBackgroundResource(R.drawable.btn_bg);

這里的R.drawable.btn_bg就是獲取圖片

但問題來了,這個獲取圖片的方式是通過對象名獲取的,獲取一兩個可以這么處理

那么如果是多個圖片要設置到多個按鈕的話

例如按鈕的id分別是btn_0,btn_1,btn_2,btn_3,btn_4

圖片是btn_bg_0,btn_bg_1,btn_bg_2,btn_bg_4,btn_bg_4

很容易可以想到就是把按鈕和圖片都弄成List,然后循環

但是問題又來了,這個按鈕要弄成List,就得每一個都findViewById

首先要聲明兩個List

List btns = new ArrayList(){ {

add((Button) findViewById(R.id.btn_0));

add((Button) findViewById(R.id.btn_1));

add((Button) findViewById(R.id.btn_2));

add((Button) findViewById(R.id.btn_3));

add((Button) findViewById(R.id.btn_4));

}};

List btn_bgs = new ArrayList(){ {

add(R.drawable.btn_bg_0);

add(R.drawable.btn_bg_1);

add(R.drawable.btn_bg_2);

add(R.drawable.btn_bg_3);

add(R.drawable.btn_bg_4);

}};

然后用的時候這樣用

for (int i = 0; i < 5; i ++) btns.get(i).setBackgroundResource(btn_bgs.get(i));

看似已經很方便了,可是這里只有5個而且還是固定的內容,如果是數量一多的話,再內容如果是變化的,不是事先確定好的那該如何實現

看到這里可能有人會想了,這里的R.id.和R.drawable.是固定的,如果能否用字符串的"R.id.btn_0"去獲取靜態對象的R.id.btn_0,那可玩性就高多了

所以本文章的重點就在于如何用String去獲取Object

看我寫法

List btns = new ArrayList(){ {

try {

for (int i = 0; i < 5; i ++)

add((Button) findViewById((int) R.id.class.getDeclaredField("btn_" + i).get(R.id.class)));

} catch (Exception e) {

// TODO: handle exception

Log.i("MainActivity", e.toString());

}

}};

List btn_bgs = new ArrayList(){ {

try {

for (int i = 0; i < 5; i ++)

add((int) R.drawable.class.getDeclaredField("btn_bg_" + i).get(R.drawable.class));

} catch (Exception e) {

// TODO: handle exception

Log.i("MainActivity", e.toString());

}

}};

使用上還是一樣,就是聲明的時候變化了,注意這里用了一句關鍵代碼

(int) R.id.class.getDeclaredField("btn_" + i).get(R.id.class))

在使用這句話的時候需要加入異常, 因為用String變量去找對象的屬性有可能會出現找不到的情況,只要發現報錯信息是java.lang.NoSuchFieldException: xxx一看就知道是找不到名為xxx的屬性

那這句關鍵代碼該如何靈活變換呢,其實很簡單,這里出現兩次的R.id.class,根據你要獲取的對象換成對應的類即可

再一個就是getDeclaredField方法里面的內容,這里面的內容位String類型,上面的例子是有規律的01234,所以很容易循環出來

有人會問了,如果是不規律的情況怎么辦,如果不規律的話那就直接用一個String[]數組把變量放進去,然后循環,以后如果有變化只要改變數組即可,一勞永逸

也可以把這里面的內容通過參數傳進來,傳什么進來他就可以獲取什么,只要能獲取得到的話,這里可發揮的空間就很大了,對應的最前面要加上強制類型轉換

整個思路大概就這樣,主要一個思想就是只要是通過字符串去獲取屬性的情況都可以采用這個方法獲取.

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java将属性练成字符串,Java中通过属性字符串名取属性内容的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。