Нет, к сожалению, вы не можете расширять типы, реализованные в C во время выполнения.
Вы можете подклассировать int, хотя это нетривиально, вам может потребоваться переопределить __new__
.
У вас также есть проблема с синтаксисом:
1.somemethod() # invalid
Однако
(1).__eq__(1) # valid
Вы, как правило, НЕ игнорируете исключение. Взгляните на следующую статью:
Не проглатывайте прерывания
Иногда бросание InterruptedException не является параметром, например, когда задание, заданное Runnable, вызывает прерывистый метод , В этом случае вы не можете повторить InterruptedException, но вы также не хотите ничего делать. Когда метод блокировки обнаруживает прерывание и выбрасывает InterruptedException, он очищает прерванный статус. Если вы поймаете InterruptedException, но не можете его восстановить, вы должны сохранить доказательства того, что произошло прерывание, чтобы код выше в стеке вызовов мог узнать о прерывании и ответить на него, если захочет. Эта задача выполняется путем вызова функции interrupt () для «переинтерпретации» текущего потока, как показано в листинге 3. По крайней мере, всякий раз, когда вы улавливаете InterruptedException и не восстанавливаете его, повторно возвращайте текущий поток перед возвратом.
blockquote>public class TaskRunner implements Runnable { private BlockingQueue<Task> queue; public TaskRunner(BlockingQueue<Task> queue) { this.queue = queue; } public void run() { try { while (true) { Task task = queue.take(10, TimeUnit.SECONDS); task.execute(); } } catch (InterruptedException e) { // Restore the interrupted status Thread.currentThread().interrupt(); } } }
См. всю статью здесь:
http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html?ca=drs-
Методы, подобные sleep()
и wait()
класса Thread
, могут вызвать InterruptedException
. Это произойдет, если какой-либо другой thread
хочет прервать thread
, ожидающий или спящий.
Если выбрано InterruptedException, это означает, что что-то хочет прервать (как правило, завершение) этого Thread. Это вызвано вызовом метода прерывания потоков (). Метод wait обнаруживает это и выдает исключение InterruptedException, поэтому код catch может немедленно обрабатывать запрос на завершение и не ждать до истечения указанного времени.
Если вы используете его в однопоточном приложении (а также в некоторых многопоточных приложениях) это исключение никогда не будет запущено. Игнорируя это, имея пустое предложение catch, я бы не рекомендовал. Бросок InterruptedException очищает прерванное состояние Thread, поэтому, если он не обрабатывается должным образом, информация теряется. Поэтому я бы предложил запустить:
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
// code for stopping current task so thread stops
}
, который устанавливает это состояние снова. После этого завершите выполнение. Это было бы правильное поведение, даже жесткое никогда не использовалось.
Что может быть лучше, добавить в блок catch команду:
} catch (InterruptedException e) {
assert false;
}
. Это в основном означает, что этого никогда не должно быть. Поэтому, если код повторно используется в среде, где может произойти, он будет жаловаться на это.
Информационный бюллетень Java Specialists (который я могу безоговорочно рекомендовать) имел интересную статью об этом и как обрабатывать InterruptedException
. Это стоит прочитать и переварить.
InterruptedException
обычно вызывается, когда спящий режим прерывается.
Твердый и простой способ справиться с этим в однопоточном коде - это поймать его и перетащить в RuntimeException, чтобы избежать необходимости объявлять его для каждого метода.