Для более чистого подхода вам следует изменить рефракцию на использование абстракции NIO2 FileSystem
, а затем использовать файловую систему, которую вы намеревались использовать. В то же время я понимаю, что это не всегда возможно.
Если вы хотите заменить File
API, возможно, самый простой способ - переопределить класс File
для реализации операций таким образом, вы хотели. Взгляните на AgentBuilder
API для этого и используйте RedefinitionStrategy.RETRANSFORM
.
. При переопределении класса File
вы можете использовать Advice
, который встроен в код шаблонов, а также позволяет переопределить реализации , В этом случае вы можете использовать Advice
в качестве перехватчика:
builder = builder.method(...).intercept(Advice.to(MyAdvice.class));
, где вы управляете реализацией, обычно из рекомендации по выходу, где вы можете установить возвращаемые значения следующим образом:
class MyAdvice {
@Advice.OnMethodExit
void exit(@Advice.Return(readOnly = false) Void value) {
value = ...;
}
}
Если вы хотите оставить части API File
нетронутыми, вы также можете использовать совет в качестве декоратора:
builder = builder.visit(Advice.to(MyAdvice.class).on(...));
, где вы можете определить, должен ли исходный метод выполняться из метода ввода.