Question: I have a `UILabel` with properties set in `IB` (like custom font, shadow color, text color etc). I wanted to print all the properties of this `UILabel` to enable me to use the same set of properties on a different screen inside a `UITableViewCell` `textLabel` property. How do I print all the properties that I have set in my first screen to use it with the `textLabel` property inside `UITableViewCell`?

Answer: 
You could use an enum, assuming the list of messages is known at compile time. The advantages are that each message is now responsible for holding its condition, and the calling code will be much simpler.

```
public enum Message {

    MESSAGE1("Welcome") {
        @Override
        boolean isApplicable(long totalDays, int x, int y) {
            return totalDays < 7 && x < 20;
        }
    },
    MESSAGE2("Bye bye") {
        @Override
        boolean isApplicable(long totalDays, int x, int y) {
            return totalDays < 7 && x > 10 && y < 20;
        }
    };

    private String msg;

    Message(String msg) {
        this.msg = msg;
    }

    abstract boolean isApplicable(long totalDays, int x, int y);

    public static String lookupMessage(long totalDays, int x, int y) {
        for (Message m : Message.values()) {
            if (m.isApplicable(totalDays, x, y)) {
                return m.msg;
            }
        }
        throw new IllegalArgumentException();
    }
}

```

Now in your calling code, no more if / else if, just one line of code:

```
System.out.println(Message.lookupMessage(1, 2, 3));

```

Note 1: This is not as efficient as using a Map as the lookup is an O(n) operation, but because n is 100 or so it should not be a significant performance penalty. And it is more readable and maintainable than the solution proposed in the other answer.

Note 2: You could even put the conditions / messages in a flat file, read the file at runtime and use a scripting engine to eval each condition at runtime. It would be slightly slower (but we are talking about sub-milliseconds here) but would remove all the clutter from your code and put it in a configuration file.
If you have so many conditions, you cant avoid putting those conditions some where in the code.
The advantages of using lookup table is
1)Easy to implement.
2)Flexible.If you want to change the value of some message in future, you can go to looktable class and change.