public String translate(Object o) {
        if (o == null) {
            return "null";
        }
        Class objectClass = o.getClass();

        if (objectClass.isArray() || o instanceof Object[]) {
            return translators.get(Object[].class).translate(o);

        } else {
            Translator lowestTranslator = null;
            System.out.println("Looking for best translator...");
            while(lowestTranslator == null) {
                System.out.println("Checking " + objectClass);
                if(translators.containsKey(objectClass)) {
                    
                    lowestTranslator = translators.get(objectClass);
                    System.out.println("lowestTranslator = " + lowestTranslator);
                }
                else {
                    objectClass = objectClass.getSuperclass();
                }
            }
            return lowestTranslator.translate(o);
        }

    }