Woocommerce Условно скрыть поле оформления заказа на основе переменной цены товара

Как и раньше, вы должны использовать:

Object value = field.get(objectInstance);

Другой способ, который иногда предпочитается, вызывает геттер динамически. Пример кода:

public static Object runGetter(Field field, BaseValidationObject o)
{
    // MZ: Find the correct method
    for (Method method : o.getMethods())
    {
        if ((method.getName().startsWith("get")) && (method.getName().length() == (field.getName().length() + 3)))
        {
            if (method.getName().toLowerCase().endsWith(field.getName().toLowerCase()))
            {
                // MZ: Method found, run it
                try
                {
                    return method.invoke(o);
                }
                catch (IllegalAccessException e)
                {
                    Logger.fatal("Could not determine method: " + method.getName());
                }
                catch (InvocationTargetException e)
                {
                    Logger.fatal("Could not determine method: " + method.getName());
                }

            }
        }
    }


    return null;
}

Также имейте в виду, что когда ваш класс наследуется от другого класса, вам необходимо рекурсивно определить поле. например, для извлечения всех полей данного класса,

    for (Class<?> c = someClass; c != null; c = c.getSuperclass())
    {
        Field[] fields = c.getDeclaredFields();
        for (Field classField : fields)
        {
            result.add(classField);
        }
    }
0
задан Brian Tompsett - 汤莱恩 17 January 2019 в 15:20
поделиться