Согласно Рабочий проект W3C 19 ноября 2013 г. display
не является анимационным свойством . К счастью, visibility
является анимированным. Вы можете связать его переход с переходом непрозрачности ( JSFiddle ):
Foo
#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;
}
var foo = document.getElementById('foo');
document.getElementById('hide-button').onclick = function () {
foo.className = 'hidden';
};
document.getElementById('show-button').onclick = function () {
foo.className = '';
};
Обратите внимание, что если вы просто сделаете ссылку прозрачной, не установив visibility: hidden
, она останется кликабельной.
Забудьте о том, что вы пытаетесь использовать для этого. Мы будем рассматривать это только с точки зрения языка.
Объявление
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);
Как писал @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;
}