Проверьте эти badblocks
команда из командной строки Linux. Обратитесь к странице справочника для получения дальнейшей информации: man badblocks
.
Как пример, я работаю /sbin/badblocks /dev/sda
ежемесячно для нахождения проблем. Я никогда не должен был использовать этот инструмент для фактической фиксации поврежденных секторов, вот почему я должен указать на Вас на страницу справочника.
BTW: Вы не можете зафиксировать файловую систему NTFS из Linux, Вам нужен Windows для этого. Yuo может однако проверить диск на сбойные блоки, как описано, и он может сделать некоторое перемещение поврежденных секторов (который не влияет на файловую систему).
Первый говорит, что это «некий тип, который является предком E»; второй говорит, что это «какой-то тип, являющийся подклассом E». (В обоих случаях E подходит.)
Значит, конструктор использует ? расширяет форму E
, чтобы гарантировать, что когда он извлекает значений из коллекции, все они будут E или каким-то подклассом (то есть совместимым). Метод dryTo
пытается поместить значения в коллекцию, поэтому коллекция должна иметь тип элемента E
или суперкласс .
] В качестве примера предположим, что у вас есть подобная иерархия классов:
Parent extends Object
Child extends Parent
и LinkedBlockingQueue
. Вы можете построить этот переход в List
, который безопасно скопирует все элементы, потому что каждый Child
является родительским. Вы не могли передать List
, потому что некоторые элементы могут быть несовместимы с Parent
.
Аналогичным образом вы можете слить эту очередь в List
, потому что каждый родительский
является объектом
... но вы не можете слить его в List
, потому что список
ожидает, что все его элементы будут совместимы с Child
.
extends E>
определяет E
как верхнюю границу: «Это может быть преобразовано в E
».
super E>
определяет E
как нижнюю границу: « E
может быть преобразовано в это».
Подстановочный знак с верхней границей выглядит как «? Extends Type» и обозначает семейство всех типов, которые являются подтипами Type, включая тип Type. Тип называется верхней границей.
Подстановочный знак с нижней границей выглядит как «? Super Type» и обозначает семейство всех типов, которые являются супертипами Type, включая тип Type. Тип называется нижней границей.
Вы можете поискать в Google термины контравариантность ( Super E>
) и ковариация ( Extends E>
). Я обнаружил, что наиболее полезным при понимании универсальных шаблонов для меня было понимание сигнатуры метода Collection.addAll
:
public interface Collection<T> {
public boolean addAll(Collection<? extends T> c);
}
Так же, как вы хотели бы иметь возможность добавить String
в List
:
List<Object> lo = ...
lo.add("Hello")
Вы также должны иметь возможность добавить List
(или любую коллекцию String
s) через метод addAll
:
List<String> ls = ...
lo.addAll(ls)
Однако вы должны понимать, что List
и List
не эквивалентны, и последнее не является подкласс первого. Что необходимо, так это концепция параметра ковариантного типа , т. Е. расширяет бит T>
.
Когда у вас есть это, легко думать о сценариях, в которых вы также хотите контравариантность (проверьте интерфейс Comparable
).
Я попытаюсь ответить на этот вопрос. Но чтобы получить действительно хороший ответ, вам следует проверить книгу Джошуа Блоха «Эффективная Java» (2-е издание). Он описывает мнемоническое выражение PECS, что означает «Producer Extends, Consumer Super».
Идея состоит в том, что если вы кодируете общие значения из объекта, вам следует использовать extends. но если вы создаете новые значения для универсального типа, вам следует использовать super.
Так, например:
public void pushAll(Iterable<? extends E> src) {
for (E e: src)
push(e);
}
И
public void popAll(Collection<? super E> dst) {
while (!isEmpty())
dst.add(pop())
}
Но на самом деле вам стоит почитать эту книгу: http://java.sun.com/docs/books/effective/