Joined July 2015
· Posted to Cleaner Logging Interface for Android Development. over 1 year ago
We can do away with the excessive switch statements and make it easier to add more log states by taking advantage of some OOP thingys. Something like this:
package com.coderwall.logstate;
interface LogStateIF{
void log(String tag, String msg);
void log(Class<?> cls, String tag, String msg);
void log(Class<?> cls, String msg);
}
package com.coderwall.logstate; class LogStateD implements LogStateIF{ @Override public void log(String tag, String msg){ Log.d(tag, msg); } @Override public void log(Class<?> cls, String tag, String msg){ Log.d(tag, cls.getName() + " "+ msg); } @Override public void log(Class<?> cls, String msg){ Log.d(TAG, cls.getName() + " "+ msg); } } package com.coderwall.logstate; class LogStateW implements LogStateIF{ @Override public void log(String tag, String msg){ Log.w(tag, msg); } @Override public void log(Class<?> cls, String tag, String msg){ Log.w(tag, cls.getName() + " "+ msg); } @Override public void log(Class<?> cls, String msg){ Log.w(TAG, cls.getName() + " "+ msg); } } package com.coderwall.logstate; class LogStateE implements LogStateIF{ @Override public void log(String tag, String msg){ Log.e(tag, msg); } @Override public void log(Class<?> cls, String tag, String msg){ Log.e(tag, cls.getName() + " "+ msg); } @Override public void log(Class<?> cls, String msg){ Log.e(TAG, cls.getName() + " "+ msg); } } package com.coderwall.logstate; class LogStateI implements LogStateIF{ @Override public void log(String tag, String msg){ Log.i(tag, msg); } @Override public void log(Class<?> cls, String tag, String msg){ Log.i(tag, cls.getName() + " "+ msg); } @Override public void log(Class<?> cls, String msg){ Log.i(TAG, cls.getName() + " "+ msg); } } package com.coderwall.logstate; public enum LogState{ D(new LogStateD()), I(new LogStateI()), W(new LogStateW()), E(new LogStateE()); private final LogStateIF implementation; private LogState(LogStateIF ls){ this.implementation = ls; } public LogStateIF getImplementation(){ return implementation; } } Sigh! Long code.. all in the name of OOP :) Then an Adapter class that makes use of our work: package com.coderwall.logstate; public class LogStateAdapter{ public static void log(LogState ls, String tag, String msg){ ls.getImplementation().log(tag, msg); } public static void log(Class<?> cls, LogState ls, String tag, String msg){ ls.getImplementation().log(cls, tag, msg); } public static void log(Class<?> cls, LogState ls, String msg){ ls.getImplementation().log(cls, msg); } }
Kikikiki... wicked laugh