Функция для скрытия Queboard.
- (void)HideQueyboard
{
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
}
public static <T> T as(Class<T> t, Object o) {
return t.isInstance(o) ? t.cast(o) : null;
}
Использование:
MyType a = as(MyType.class, new MyType());
// 'a' is not null
MyType b = as(MyType.class, "");
// b is null
Можно, но не с помощью одной функции в Java:
public B nullCast(Object a) {
if (a instanceof B) {
return (B) a;
} else {
return null;
}
}
РЕДАКТИРОВАТЬ: Обратите внимание, что можно 't сделать класс B универсальным (для этого примера) без добавления целевого класса (это связано с тем, что универсальный тип недоступен для instanceof
):
public <V, T extends V> T cast(V obj, Class<T> cls) {
if (cls.isInstance(obj)) {
return cls.cast(obj);
} else {
return null;
}
}
Вы можете использовать ключевое слово instanceof
, чтобы определить, можете ли вы правильно выполнить приведение.
return obj instanceof String?(String)obj: null;
Конечно, его можно обобщить и превратить в функцию, но я думаю, что вопрос заключался в том, какие средства должны иметь Java для этого.
MyType e = ( MyType ) orNull( object, MyType.class );
// if "object" is not an instanceof MyType, then e will be null.
...
public static Object orNull( Object o , Class type ) {
return type.isIntance( o ) ? o : null;
}
Я предполагаю, что это можно было бы как-то сделать и с дженериками, но я думаю, но, вероятно, это не то, что нужно.
Этот простой метод получает Object и возвращает Object, потому что приведение выполняется в клиенте метода.
В Java, если преобразование завершилось неудачно, вы получите ClassCastException. Вы можете перехватить исключение и установить для целевого объекта значение null.
AFAIK, это был бы (один) из способов сделать это:
SomeClassToCastTo object = null;
try {
SomeClassToCastTo object = SomeClassToCastTo.class.cast(anotherObject);
}
catch (ClassCastException e) {
object = null;
}
Уродливо, но он должен делать то, что вы хотите ...
Вы можете поймать исключение:
Foo f = null;
try {
f = Foo(bar);
}
catch (ClassCastException e) {}
или проверить тип:
Foo f = null;
if (bar instanceof Foo)
f = (Foo)bar;
Два приведенных выше решения несколько неудобны:
Приведение и перехват исключения ClassCastException: создание объекта исключения может быть дорогостоящим (например, вычисление трассировки стека).
Метод nullCast, описанный ранее, означает вам нужен метод приведения для каждого приведения, который вы хотите выполнить.
Универсальные шаблоны подводят вас из-за «стирания типа» ...
Вы можете создать статический вспомогательный метод, который гарантированно вернет экземпляр вашего целевого класса или null, а затем преобразовать результат, не опасаясь исключения:
public static Object nullCast(Object source, Class target) {
if (target.isAssignableFrom(source.getClass())) {
return target.cast(source);
} else {
return null;
}
}
Пример вызова:
Foo fooInstance = (Foo) nullCast(barInstance, Foo.class);
вы можете обработать это исключение ClassCastException