static 块的定义与使用范例

下面通过一个实例来介绍如何使用 static 块来优化代码。该代码冗余部分用绿色标出,该函数被调用四次。

      public static final String MOOD_IMAGE_KEY_PRE = "pref_camera_water_mark_mood_image_key_";
        public static final String MOOD_IMAGE_KEY_PRE_EX = "pref_camera_water_mark_mood_image_key_ex_";

        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                if (position >= mImageIds.length) return;
                ComboPreferences pref = new ComboPreferences(WaterMarkMoodImageActivity.this);
                pref.setLocalId(WaterMarkMoodImageActivity.this, 
                                WaterMarkMoodImageActivity.this.getIntent().getIntExtra("camera-id", 0));
        Editor editor = pref.edit();
        if (Util.IsExport()) {
                editor.putString(WaterMarkManager.MOOD_IMAGE_KEY_PRE_EX+""+mSelectedIndex, ""+position);
        } else {
                editor.putString(WaterMarkManager.MOOD_IMAGE_KEY_PRE+""+mSelectedIndex, ""+position);
        }
        editor.apply();

                WaterMarkMoodImageActivity.this.finish();
        }

        private int getImageBackgroundIdFromPreference(int position) {
                IconListPreference imagePreference = null;
                if(Util.IsExport()) {
                        imagePreference = (IconListPreference)  ((PhotoModule)mPhotoModule).getPreferenceGroup()
                    .findPreference(MOOD_IMAGE_KEY_PRE_EX+""+position);
                } else {
                        imagePreference = (IconListPreference)  ((PhotoModule)mPhotoModule).getPreferenceGroup()
                        .findPreference(MOOD_IMAGE_KEY_PRE+""+position);
                }
                int index = imagePreference.findIndexOfValue(imagePreference.getValue());
                int[] imageBackgroundId = imagePreference.getImageIdsBackground();
                if (imageBackgroundId == null) {
                        return 0;
                }
                return imageBackgroundId[index];
        }
        
        private int getImageAddon1IdFromPreference(int position) {
                IconListPreference imagePreference = null;
                if (Util.IsExport()) {
                imagePreference = (IconListPreference)  ((PhotoModule)mPhotoModule).getPreferenceGroup()
                    .findPreference(MOOD_IMAGE_KEY_PRE_EX+""+position);
                } else {
                imagePreference = (IconListPreference)  ((PhotoModule)mPhotoModule).getPreferenceGroup()
                        .findPreference(MOOD_IMAGE_KEY_PRE+""+position);
                }
                int index = imagePreference.findIndexOfValue(imagePreference.getValue());
                int[] imageAddon1Id = imagePreference.getImageIdsAddon1();
                if (imageAddon1Id == null) {
                        Log.i(TAG, "----- get null addon 1");
                        return 0;
                }
                return imageAddon1Id[index];
        }
        
        private int getImageAddon2IdFromPreference(int position) {
                IconListPreference imagePreference = null;
                if (Util.IsExport()) {
               imagePreference = (IconListPreference)  ((PhotoModule)mPhotoModule).getPreferenceGroup()
                    .findPreference(MOOD_IMAGE_KEY_PRE_EX+""+position);
                } else {
                imagePreference = (IconListPreference)  ((PhotoModule)mPhotoModule).getPreferenceGroup()
                        .findPreference(MOOD_IMAGE_KEY_PRE+""+position);
                }
                int index = imagePreference.findIndexOfValue(imagePreference.getValue());
                int[] imageAddon2Id = imagePreference.getImageIdsAddon2();
                if (imageAddon2Id == null) {
                        Log.i(TAG, "----- get null addon 2");
                        return 0;
                }
                return imageAddon2Id[index];
        }               

之前的代码如上面所示。之所以这样做是因为要对一个功能根据项目作一些区别。但上面的代码的冗余主要体现在每次调用 MOOD_IMAGE_KEY_PRE 时均要作出判断。下面请看优化之后的代码:(绿色部分只调用一次)

    public static final String MOOD_IMAGE_KEY_PRE;// = "pref_camera_water_mark_mood_image_key_";
        static {
                if(Util.IsExport()){
                        MOOD_IMAGE_KEY_PRE = "pref_camera_water_mark_mood_image_key_ex_";
                } else {
                        MOOD_IMAGE_KEY_PRE = "pref_camera_water_mark_mood_image_key_";
                }
        }

                public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                        if (position >= mImageIds.length) return;
                        ComboPreferences pref = new ComboPreferences(WaterMarkMoodImageActivity.this);
                        pref.setLocalId(WaterMarkMoodImageActivity.this, 
                                        WaterMarkMoodImageActivity.this.getIntent().getIntExtra("camera-id", 0));
                Editor editor = pref.edit();
                if(Util.IsExport()){
                editor.putString(WaterMarkManager.MOOD_IMAGE_KEY_PRE+""+mSelectedIndex, ""+position);
                editor.apply();

                        WaterMarkMoodImageActivity.this.finish();
                }

        private int getImageBackgroundIdFromPreference(int position) {
                IconListPreference imagePreference =
                    (IconListPreference)  ((PhotoModule)mPhotoModule).getPreferenceGroup()
                    .findPreference(MOOD_IMAGE_KEY_PRE+""+position);
                int index = imagePreference.findIndexOfValue(imagePreference.getValue());
                int[] imageBackgroundId = imagePreference.getImageIdsBackground();
                if (imageBackgroundId == null) {
                        return 0;
                }
                return imageBackgroundId[index];
        }
        
        private int getImageAddon1IdFromPreference(int position) {
                IconListPreference imagePreference =
                    (IconListPreference)  ((PhotoModule)mPhotoModule).getPreferenceGroup()
                    .findPreference(MOOD_IMAGE_KEY_PRE+""+position);
                int index = imagePreference.findIndexOfValue(imagePreference.getValue());
                int[] imageAddon1Id = imagePreference.getImageIdsAddon1();
                if (imageAddon1Id == null) {
                        Log.i(TAG, "----- get null addon 1");
                        return 0;
                }
                return imageAddon1Id[index];
        }
        
        private int getImageAddon2IdFromPreference(int position) {
                IconListPreference imagePreference =
                    (IconListPreference)  ((PhotoModule)mPhotoModule).getPreferenceGroup()
                    .findPreference(MOOD_IMAGE_KEY_PRE+""+position);
                int index = imagePreference.findIndexOfValue(imagePreference.getValue());
                int[] imageAddon2Id = imagePreference.getImageIdsAddon2();
                if (imageAddon2Id == null) {
                        Log.i(TAG, "----- get null addon 2");
                        return 0;
                }
                return imageAddon2Id[index];
        }               

加了 static 块之后,其实我们只需要修改 static 块部分,其它的代码均不用作出改动。根据项目来判断,不同的项目将 MOOD_IMAGE_KEY_PRE 赋为不同的值即可。这样一来大大简化了要修改的代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值