В моем коде, я создаю набор объектов, к которым получат доступ различные потоки способом, который только безопасен, если объекты неизменны.
Не прямой ответ на Ваш вопрос, но имеют в виду, что возражает, что неизменны, как, автоматически гарантируют, не будут ориентированы на многопотоковое исполнение (печально). Код должен быть побочным эффектом, бесплатным быть ориентированным на многопотоковое исполнение, и это вполне немного более трудно.
предположим у Вас есть этот класс:
class Foo {
final String x;
final Integer y;
...
public bar() {
Singleton.getInstance().foolAround();
}
}
Тогда foolAround()
метод мог бы включать некоторые неориентированные на многопотоковое исполнение операции, которые аварийно завершат Ваше приложение. И не возможно протестировать на это отражение использования, поскольку фактическая ссылка может только быть найдена в теле метода, не в полях или представила интерфейс.
Кроме этого, другие корректны: можно просканировать для всех заявленных полей класса, проверить, являются ли каждые из них окончательными и также неизменный класс, и Вы сделаны. Я не думаю, что методы, являющиеся окончательным, являются требованием.
кроме того, быть осторожными относительно рекурсивной проверки зависимых полей для неизменности, Вы могли бы закончить с кругами:
class A {
final B b; // might be immutable...
}
class B {
final A a; // same so here.
}
Классы A и B совершенно неизменны (и возможно даже применимы посредством некоторых отражательных взломов), но наивный рекурсивный код войдет в бесконечный цикл, проверяющий A, тогда B, тогда снова, вперед к B...
можно зафиксировать это с 'замеченной' картой, которая запрещает циклы, или с некоторым действительно умным кодом, который решает, что классы неизменны, если все их dependees неизменны только в зависимости от себя, но это будет действительно сложным...
Похоже, что нет способа сделать это с помощью AWT.
Если вы используете Swing, есть метод, который вы можете использовать для получения значка Swing
...
import javax.swing.filechooser.FileSystemView;
import javax.swing.Icon;
...
Icon ico = FileSystemView.getFileSystemView().getSystemIcon(file);
Вы также можете преобразовать этот Icon
обратно в Image
(скорее всего, BufferedImage, но я его не тестировал):
Image image = ((ImageIcon) ico).getImage();
Существует также класс для прямого получения значка, но этот класс зависит от JDK. В Sun JDK это класс sun.awt.shell.ShellFolder
.
Если вы используете SWT, все немного сложнее .
Я не думаю, что приведенные выше ответы относятся к правильному вопросу. Martijn не запрашивает API для управления изображениями значков. Он хочет знать, как получить доступ к кешу на рабочем столе с миниатюрами изображений для элементов в просматриваемой файловой системе.
Я не думаю, что есть переносимый способ сделать это вообще, но мир Linux (Gnome и KDE) придерживается стандарт эскизов Freedesktop, который можно прочитать по адресу: http://jens.triq.net/thumbnail-spec/
Может быть код, возможно в Gtk (но, вероятно, не Java), который реализует уровень совместимости для windows, но я не знаю, есть ли там.
Not entirely sure if you will be able to get the icon but take a look at AssociationService
that is accessible using JDIC.
http://java.sun.com/developer/technicalArticles/J2SE/Desktop/jdic_assoc/
Also this thread http://forums.sun.com/thread.jspa?threadID=5357995