Обновлено: В соответствии с комментариями и вашими разъяснениями: невозможно написать свой код, безопасный для типов, если вы не знаете его заранее. В этом нет смысла.
Таким образом, вы должны продолжать использовать отражение или свой собственный способ регистрации метаданных типа (перечисление или класс, содержащий некоторую полезную информацию о его типе).
Вы можете использовать свои собственные метаданные, как описано выше, для создания своего пользовательского интерфейса, проверки данных и требуемого приведения в конкретных случаях.
Старый и менее релевантный: Если вы знаете тип во время компиляции, вы можете использовать дженерики, чтобы он выглядел немного более упорядоченным:
public T GetValueOrDefault<T>(string key)
{
if (this.dictionary.TryGetValue(key, out object o))
{
return (T)(object)o;
}
return default(T);
}
Наверняка Вы должны проверить, имеет ли ваш дизайн смысл, но сейчас я не могу судить об этом по тому, что вы написали.
Я полагаю, вам нужно взглянуть на использование профилировщика. Или что-то, что использует интерфейс инструментовки.
Не уверен, насколько он стабилен, но есть BTrace , который является разновидностью Java-версии DTrace.
BTrace - безопасный, динамический инструмент трассировки для платформы Java. BTrace можно использовать для динамического отслеживания работающей Java-программы. BTrace динамически инструктирует классы целевого приложения для внедрения кода трассировки («отслеживание байт-кода»). Код трассировки выражен на языке программирования Java.
Если вы делаете это на компьютере разработчика, и число событий (загружаемых ресурсов) не слишком частое, вы также можете просто установить точку останова в отладчике.
Ресурсы предоставляются как URL
s. Итак, я думаю сделать это в «чистой» Java: установить собственный ClassLoader
, который копирует URL
в версию с пользовательским URLStreamHandler
. Поместите ваш код мониторинга в обработчик потока и перешлите к оригиналу.
В среде Linux вы можете попробовать:
lsof -p <jvm pid>
Он выдаст вам список с дескрипторы, используемые программой, связанной с указанным pid.