How to reduce code with a function when using a large number of links, such as PIXELS_PER_INCH = 72?

I have a code that needs to be shortened, and I was recommended on Reddit.com that I use functions for this. But the problem is that the code is basically a collection of public static final"links" such as PIXELS_PER_INCH = 72.

I open my application on GitHub if someone wants to look at it that way.

Here's an example of where I assign values ​​to my constants:

public static final int PICTURES_4 = 0;
public static final int PICTURES_6 = 1;
public static final int PICTURES_8 = 2;
public static final int PICTURES_10 = 3;
public static final int PICTURES_12 = 4;

public static final int PICTURES_OPTION_0 = 4;
public static final int PICTURES_OPTION_1 = 6;
public static final int PICTURES_OPTION_2 = 8;
public static final int PICTURES_OPTION_3 = 10;

And here is an example of where I use these constant links:

switch (settings.getInt(SettingsActivity.PICTURES_OPTION, SettingsActivity.DEFAULT_PICTURES_OPTION)) {
        case SettingsActivity.PICTURES_4:
            totalImages = SettingsActivity.PICTURES_OPTION_0;
            break;
        case SettingsActivity.PICTURES_6:
            totalImages = SettingsActivity.PICTURES_OPTION_1;
            break;
        case SettingsActivity.PICTURES_8:
            totalImages = SettingsActivity.PICTURES_OPTION_2;
            break;

, , , . ? - (, PIXELS_PER_INCH = 72) .

.

: aioobe Lloyd Ozymandias Force. EnumMap for. for myEnumMap.values() - . Googled it , myEnumMap.class.getEnumConstants(), .

+3
2
  • get(option) switch(option)

    :

    Map<Integer, Integer> optionsMap = new HashMap<Integer, Integer>() {{
        put(SettingsActivity.PICTURES_4, SettingsActivity.PICTURES_OPTION_0);
        put(SettingsActivity.PICTURES_6, SettingsActivity.PICTURES_OPTION_1);
        ...
    }};
    

    :

    totalImages = optionsMap.get(settings.getInt(SettingsActivity.PICTURES_OPTION,
                                       SettingsActivity.DEFAULT_PICTURES_OPTION));
    
  • , ( ), .

  • :

    public int getPictureOption() {
        switch (settings.getInt(SettingsActivity.PICTURES_OPTION,
                                SettingsActivity.DEFAULT_PICTURES_OPTION)) {
                case SettingsActivity.PICTURES_4:
                    return SettingsActivity.PICTURES_OPTION_0;
    
                case SettingsActivity.PICTURES_6:
                    return SettingsActivity.PICTURES_OPTION_1;
    
                case SettingsActivity.PICTURES_8:
                    return SettingsActivity.PICTURES_OPTION_2;
        }
    }
    

    do

    totalImages = getPictureOption();
    

, , SettingsActivity., :

import static your.package.SettingsActivity.*;
+3

- /, aiobe.

Java, SettingsActivity getPictureOption(). enum, enum . " Java 2nd Edition" ( ).

enum SettingsActivity {
    OPTION_1(){
        public int getPicureOption() {
            return  myValue * 6;
        }
    },
    OPTION_2(){
        public int getPictureOption() {
            return Math.pow(myValue,5);
        }
    },
    ...
    OPTION_N() {
        public int getPictureOption() {
            return myValue-6;
        }
    };

    private final int myValue;

    private SettingsActivity(int myValue) {
        this.myValue = myValue;
    }

    // enums can have abstract methods!
    public abstract int getPictureOption();
}

SettingsActivity foo = getSettingsActivityFromSomewhere();

// polymorphic getPictureOption method - we don't
// know which activity was clicked
int something = foo.getPictureOption();

, , . , switch SettingsActivity, .

, , EnumMap, JDK, Map ( 65 > 64 ). O (1) ( O (lg n) -).

+2

All Articles