3 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊
在 java 8 和/或沒有模塊的情況下,可以將類似的類放在與原始包相同的包中以訪問所有包默認(rèn)類。
否則,你需要在其他響應(yīng)使用反射像,但我想補(bǔ)充一點(diǎn),這是好主意,緩存Class
和Method
實(shí)例,如使用Class.forName
和clazz.getDeclaredMethod
每次都會(huì)放緩代碼。

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
獲取Class對象然后調(diào)用特定(未轉(zhuǎn)換)對象上的方法怎么樣?
我假設(shè)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
}
...
}
編輯:我根據(jù)@GotoFinal 的建議更新了這個(gè)答案。
添加回答
舉報(bào)