3 回答
TA贡献1817条经验 获得超14个赞
在 java 8 和/或没有模块的情况下,可以将类似的类放在与原始包相同的包中以访问所有包默认类。
否则,你需要在其他响应使用反射像,但我想补充一点,这是好主意,缓存Class
和Method
实例,如使用Class.forName
和clazz.getDeclaredMethod
每次都会放缓代码。
TA贡献1934条经验 获得超2个赞
获取Class对象然后调用特定(未转换)对象上的方法怎么样?
我假设request是 type 的类属性HttpServerRequestWrapper。然后,这就是我的建议:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
...
private final Method setMethod;
private final Method setPath;
public MyConstructor() {
Method tmp1 = null, tmp2 = null;
try {
final Class<?> clazz = Class.forName("io.vertx.ext.web.impl.HttpServerRequestWrapper");
tmp1 = clazz.getMethod("setMethod", HttpMethod.class);
tmp1.setAccessible(true);
tmp2 = clazz.getMethod("setPath", String.class);
tmp2.setAccessible(true);
} catch (ClassNotFoundException e) {
// do something
} catch (NoSuchMethodException e) {
// do something
} catch (SecurityException e) {
// do something
}
this.setMethod = tmp1;
this.setPath = tmp2;
}
...
@Override
public void reroute(HttpMethod method, String path) {
...
try {
this.setMethod.invoke(request, method);
this.setPath.invoke(request, path);
} catch (IllegalAccessException e) {
// do something
} catch (IllegalArgumentException e) {
// do something
} catch (InvocationTargetException e) {
// do something
}
...
}
编辑:我根据@GotoFinal 的建议更新了这个答案。
添加回答
举报