Возможный получить название текущего класса от неинстанцированного объекта в PHP?

Единственный способ «передать метод» - создать объект, содержащий логику для этого, или использовать ссылку на метод.

Более того, даже несмотря на то, что JavaFX не применяет эти ограничения, id должен быть уникальным. Вместо этого используйте псевдоклассы.

Вы можете использовать

private static final PseudoClass ZERO = PseudoClass.getPseudoClass("zero-atm");
private static final PseudoClass CREDIT = PseudoClass.getPseudoClass("credit-atm");
private static final PseudoClass DEBIT = PseudoClass.getPseudoClass("debit-atm");

public static <S, T> void renderColumn(TableColumn<S, T> column,
        final Callback<? super S, ObservableValue<T>> extractor, final Callback<? super T, String> converter,
        final Comparator<T> comparator, final T zero) {
    if (extractor == null || comparator == null || zero == null) {
        throw new IllegalArgumentException();
    }

    column.setCellValueFactory(cd -> extractor.call(cd.getValue()));
    column.setCellFactory(col -> new TableCell<S, T>() {
        @Override
        protected void updateItem(T item, boolean empty) {
            super.updateItem(item, empty);

            pseudoClassStateChanged(ZERO, false);
            pseudoClassStateChanged(CREDIT, false);
            pseudoClassStateChanged(DEBIT, false);

            if (empty || item == null) {
                setText("");
            } else {
                setText(converter.call(item));
                int comparison = comparator.compare(zero, item);
                if (comparison == 0) {
                    pseudoClassStateChanged(ZERO, true);
                } else {
                    pseudoClassStateChanged(comparison < 0 ? CREDIT : DEBIT, true);
                }
            }
        }
    });
}

public static <S, T extends Comparable<T>> void renderColumn(TableColumn<S, T> column,
        Callback<? super S, ObservableValue<T>> extractor, Callback<? super T, String> converter, T zero) {
    renderColumn(column, extractor, converter, Comparator.naturalOrder(), zero);
}

. Предполагая, что вы измените тип budget на ObjectProperty<BigDecimal>, метод может быть вызван, как показано ниже. (BigDecimal намного проще работать, когда речь идет о сравнении значений и выполнении других математических операций в дополнение к избежанию ошибок округления.) В противном случае вы можете просто жестко закодировать параметр второго типа и другие функциональные возможности и оставить только первые 2 параметра метода.

renderColumn(column, TxnObject::budgetAmountProperty, (BigDecimal val) -> val.abs().toString(), BigDecimal.ZERO);
5
задан Andrew G. Johnson 24 January 2009 в 22:20
поделиться

3 ответа

Мой вопрос, как Вам удается вызвать статическую функцию, не зная имени класса во-первых?

Этими только двумя путями я могу думать:

ExampleClass::getClassName(); //Hard Coded - the class name is hard and visible
$class = "ExampleClass";
$class::getClassName();       //Soft Coded - the class name is the value of $class

Возможно, лучшее решение могло быть предложено, если бы мы знали контекст, в котором Вы пытаетесь выполнить вызов?

0
ответ дан 13 December 2019 в 19:37
поделиться

Я выяснил, что можно использовать __ КЛАСС __ для получения имени класса. Пример:

class ExampleClass
{
    static function getClassName()
    {
        echo __CLASS__;
    }
}
3
ответ дан 13 December 2019 в 19:37
поделиться

Я думаю, что Вы ищете get_called_class () функция, если Вы хотите получить имя класса от статического метода.

См. get_called_class документацию для получения дополнительной информации.

8
ответ дан 13 December 2019 в 19:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: