Передача общей функции на общий метод [duplicate]

Согласно Рабочий проект W3C 19 ноября 2013 г. display не является анимационным свойством . К счастью, visibility является анимированным. Вы можете связать его переход с переходом непрозрачности ( JSFiddle ):

  • HTML:
    Foo
    
    
    
  • CSS:
    #foo {
        transition-property: visibility, opacity;
        transition-duration: 0s, 1s;
    }
    
    #foo.hidden {
        opacity: 0;
        visibility: hidden;
        transition-property: opacity, visibility;
        transition-duration: 1s, 0s;
        transition-delay: 0s, 1s;
    }
    
  • JavaScript для тестирования:
    var foo = document.getElementById('foo');
    
    document.getElementById('hide-button').onclick = function () {
        foo.className = 'hidden';
    };
    
    document.getElementById('show-button').onclick = function () {
        foo.className = '';
    };
    

Обратите внимание, что если вы просто сделаете ссылку прозрачной, не установив visibility: hidden, она останется кликабельной.

-2
задан David 14 October 2015 в 17:47
поделиться

2 ответа

Забудьте о том, что вы пытаетесь использовать для этого. Мы будем рассматривать это только с точки зрения языка.

Объявление

public <T extends Number> T getSomeValue (boolean tf) {

определяет новый тип T, который ограничен Number. Это означает, что вызывающий может связывать Number или любой подтип Number с T при вызове метода. Внутри метода вы не знаете, что это за тип.

Поэтому вы не можете делать

T number = new Double(1.0);

, потому что вы не знаете, что T является Double. Если я вызвал метод как

Float f = genOp.getSomeValue(true);

T, он должен был Float. Компилятор не может гарантировать безопасность типа и, следовательно, отклоняет его (присваивание внутри метода, если оно было разрешено, ClassCastException было бы выброшено во время выполнения). Если вы используете бросок, вы сообщаете компилятору, что вы уверены в том, что делаете. Он предупредит вас, но он вам будет доверять.

Аналогично, объявление

public <T> T getSomeValue(boolean tf)

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

String f = genOp.getSomeValue(true);
5
ответ дан Sotirios Delimanolis 27 August 2018 в 06:25
поделиться

Как писал @Sotirios Delimanolis, вы даже не можете запустить этот код.

Попробуйте это:

@SuppressWarnings("unchecked")
public <T extends Number> T getSomeValue(boolean tf) {
    T number;
    if (tf) {
        number = (T) new Double(1.0);
    } else {
        number = (T) new Integer(11);
    }
    return number;
}
-2
ответ дан Dmitry Dyokin 27 August 2018 в 06:25
поделиться
Другие вопросы по тегам:

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