Я попробовал метод setTimeout()
, подробно описанный выше ...
.catch(function(err) { setTimeout(function() { throw err; }); });
Раздражающе, я обнаружил, что это абсолютно неуместно. Поскольку он выдает асинхронную ошибку, вы не можете обернуть ее внутри оператора try/catch
, потому что catch
перестанет прослушиваться по ошибке времени.
Я вернул только использование прослушивателя который отлично работал и, поскольку он предназначен для использования JavaScript, был высоко проверяемым.
return new Promise((resolve, reject) => {
reject("err");
}).catch(err => {
this.emit("uncaughtException", err);
/* Throw so the promise is still rejected for testing */
throw err;
});
Измените его на:
protected static <T extends Comparable<T>> int nullCompare(T o1, T o2) {
Вам нужно это, потому что Сопоставимый самостоятельно универсальный тип.
Я не уверен, что genericizing этот метод имеет смысл. В настоящее время метод работает над любым довольно Сопоставимым; если Вы genericize это необходимо будет реализовать его (с точно тем же кодом) многократно. Иногда возможно сравнить два объекта, которые не имеют общего предка, и любая универсальная версия не позволит это.
Путем добавления дженериков Вы не добавите безопасности к коду; любые проблемы безопасности произойдут в вызове с compareTo. То, что я предложил бы, просто подавляет предупреждение. Это действительно не предупреждает Вас ни о чем полезном.
Не может отредактировать так, я должен отправить свой ответ.
необходимо объявить параметр вложенного типа, так как Сопоставимый универсально.
protected static <T extends Comparable<? super T>> int nullCompare(T o1, T o2) {
Обратите внимание на то, что Comparable<? супер T> , который делает более гибким. Вы будете видеть то же определение метода на Collections.sort
public static <T extends Comparable<? super T>> void sort(List<T> list) {
Вот нечетный случай:
static class A {
...
}
static class B extends A implements Comparable<A> {
public int compareTo(A o) {
return ...;
}
}
К счастью код как тот выше редок, но nullCompare () не будет поддерживать сравнение бакалавра наук, если не будет указано, что Сопоставимый может относиться к T или любому суперклассу этого :
protected static <T extends Comparable<? super T>> int nullCompare(T o1, T o2) {
Даже при том, что большинство людей никогда не будет извлекать выгоду из вышеупомянутой тонкой настройки, она может пригодиться при разработке API для экспортируемых библиотек.
Чтобы сделать его еще более общим, вы можете даже позволить ему работать для двух разных типов. = P
/**
* Compare two Comparables, treat nulls as -infinity.
* @param o1
* @param o2
* @return -1 if o1<o2, 0 if o1==o2, 1 if o1>o2
*/
protected static <T> int nullCompare(Comparable<? super T> o1, T o2) {
if (o1 == null) {
if (o2 == null) {
return 0;
} else {
return -1;
}
} else if (o2 == null) {
return 1;
} else {
return o1.compareTo(o2);
}
}