中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java如何使用屬性文件和Reflections動態加載類

發布時間:2020-06-02 21:25:16 來源:億速云 閱讀:255 作者:Leah 欄目:編程語言

這篇文章給大家分享的是Java使用屬性文件和Reflections動態加載類的方法。小編覺得挺實用的,因此分享給大家學習。如下資料是關于Reflections動態加載類實現內容。

MyBirds示例

讓我們從一個非常簡單的問題陳述開始:指定特定鳥的名字后,我應該能夠加載它的字符。 例如:當我指定鴨子時,調用sound()函數應顯示“ quack”;

在這種情況下,你需要根據客戶端或外部源提供的某些數據動態加載類。 你還希望靈活地在簡單的屬性文件中配置類,并且這些類具有類似的行為。


為了實現這一點,我們將需要以下組件:

·         mybirds.properties ——可在其中將鍵映射到類的屬性文件。

·         MyBird.java ——屬性文件中指定的所有類都必須實現的接口。

·         Duck.java, Eagle.java ——實現接口MyBird的類。

·         MyBirdFactory.java ——動態創建類的工廠類


讓我們看一下這些代碼。讓我們從mybirds.properties開始。

1

2

3

#BIRD-TYPE=IMPLEMENTATION-CLASS

duck=com.foo.Duck

eagle=com.foo.Eagle


現在,MyBird.java接口聲明了子類應實現的方法。

1

2

3

4

5

6

7

8

package com.foo;

 

/**

 * http://www.janeve.me

 */

public interface MyBird {

    public String sound();

}


現在讓我們看看Duck.javaEagle.java

1

2

3

4

5

6

7

8

9

10

11

package com.foo;

 

/**

 * http://www.janeve.me

 */

public class Duck implements MyBird {

 

    public String sound() {

        return "Quack";

    }

}

 

1

2

3

4

5

6

7

8

9

10

11

12

package com.foo;

 

/**

 * http://www.janeve.me

 */

public class Eagle implements MyBird {

 

    public String sound() {

        return "Scream";

    }

 

}


MyBirdFactory.java是負責根據傳遞給它的birdType輸入創建所需實例的類。.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

package com.foo;

 

import java.util.Enumeration;

import java.util.Hashtable;

import java.util.Locale;

import java.util.ResourceBundle;

 

/**

 * http://www.janeve.me

 */

public class MyBirdFactory {

 

    private static final String MY_BIRDS_CONFIGURATION = "mybirds";

    private static Hashtable<String, String> myBirdsMappings = new Hashtable<String, String>();

 

    static {

        try {

            loadMyBirdsrMappings();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

 

    public static MyBird getMyBird(String birdType) {

        String className = myBirdsMappings.get(birdType);

 

        MyBird bird = null;

 

        try {

            if( className!=null) {

                Class cls = Class.forName(className);

                bird = (MyBird)cls.newInstance();

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

 

        return bird;

    }

 

    private static void loadMyBirdsrMappings() {

        ResourceBundle rb = ResourceBundle.getBundle(MY_BIRDS_CONFIGURATION, Locale.getDefault());

        for (Enumeration e = rb.getKeys(); e.hasMoreElements();) {

            String key = (String) e.nextElement();

            myBirdsMappings.put(key, rb.getString(key));

        }

    }

}


確保MY_BIRDS_CONFIGURATION的值與屬性文件的名稱相同。


我們可以編寫TestCode.java來測試代碼。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

package com.foo;

 

/**

 * http://www.janeve.me

 */

public class TestCode {

 

    public static void main(String[] args) {

        if(args.length <=0)

            System.out.println("Please provide input. E.G: duck eagle duck ...");

        else {

            for(String name:args){

                MyBird bird = MyBirdFactory.getMyBird( name );

                if(bird == null){

                    System.out.println("Couldn't find your bird. Please make sure it's entered in   mybirds.properties");

                } else {

                    System.out.println("The sound of the bird"  + name + " is " + bird.sound() );

                }

 

            }

        }

 

    }

 

}


運行代碼時簽出輸出。

1

2

3

4

5

6

7

8

9

C:\Janeve\MyBirds>java -classpath ./ com.foo.TestCode duck duck eagle duck eagle   eagle

The   sound of the bird duck is Quack

The   sound of the bird duck is Quack

The   sound of the bird eagle is Scream

The   sound of the bird duck is Quack

The   sound of the bird eagle is Scream

The   sound of the bird eagle is Scream

 

C:\Janeve\MyBirds>

如你所見,這些類是根據你的輸入加載的。

上文描述的就是Java使用屬性文件和Reflections動態加載類的方法,具體使用情況還需要大家自己動手實驗使用過才能領會。如果想了解更多相關內容,歡迎關注億速云行業資訊頻道!


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湘阴县| 措勤县| 崇礼县| 分宜县| 松溪县| 塘沽区| 溆浦县| 丹阳市| 宝兴县| 洪洞县| 龙山县| 安龙县| 营口市| 宜春市| 犍为县| 石柱| 南皮县| 龙泉市| 鄂州市| 岑巩县| 中西区| 霍城县| 镇原县| 秦安县| 古丈县| 泉州市| 磐石市| 太保市| 洞口县| 汪清县| 忻州市| 凤翔县| 化州市| 临城县| 重庆市| 阳东县| 曲沃县| 洪湖市| 喀喇| 滁州市| 理塘县|