日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java类获取声明,获取用于MethodInvocation的实际类而不是声明类 - java

發布時間:2025/4/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java类获取声明,获取用于MethodInvocation的实际类而不是声明类 - java 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我正在研究Web應用程序,以解決一些問題。該應用程序使用Tomcat,Jersey和Guice。用于授權目的的MethodInterceptor中發生了問題之一。這是方法,已裁剪為相關部分:

public Object invoke(MethodInvocation invoc) throws Throwable {

// ...

//Check that the annotation actually exists

if(! invoc.getMethod().getDeclaringClass().isAnnotationPresent(Tool.class))

{

throw new BaseException("...");

}

// ...

}

現在的問題是某些“面向Web”的方法是從父類繼承而沒有在子類中被覆蓋。如果我正確理解getDeclaringClass(),在這種情況下它將返回父類,但是我們真正想要的是子類。一些測試似乎證實了這一點-如果我在子類中重寫該方法,一切都很好,但是,如果我不放入重寫中,則會引發異常。

因此,給定一個MethodInvocation對象,是否有辦法將其追溯到實例化的“實際”類,而不是聲明該方法的類?還是需要其他方法?最壞的情況是,我可以根據需要注釋每個方法,而不必注釋類。

很抱歉,如果這是一個容易回答的冗長問題-我的Java非常生銹。

參考方案

很簡單,需要在MethodInvocation上使用getThis().getClass()而不是getMethod().getDeclaringClass():

if(! invoc.getThis().getClass().isAnnotationPresent(Tool.class))

{

throw new BaseException("...");

}

盡管就我而言,Guice通過放入一個自動生成的子類(例如,以“$$ EnhancerByGuice ...結尾”的類名)使事情有些復雜,這是通過使用getSuperclass()在樹上向上移動來解決的:

if(! invoc.getThis().getClass().getSuperclass().isAnnotationPresent(Tool.class))

{

throw new BaseException("...");

}

Java:從類中查找項目名稱 - java

僅通過類的實例,如何使用Java反射或類似方法查找項目名稱?如果不是,項目名稱(我真正想要的是)可以找到程序包名稱嗎? 參考方案 項目只是IDE使用的簡單組織工具,因此項目名稱不是類或JVM中包含的信息。要獲取軟件包,請使用Class#getPackage()。然后,可以調用Package#getName()將包作為您在代碼的包聲明中看到的String來獲取…Java:正則表達式模式匹配器是否有大小限制? - java

我的模式類似于OR:“word1 | word2 | word3”我大約有800個字??赡苡袉栴}嗎? 參考方案 您僅受記憶和理智的限制。 :)Java:線程池如何將線程映射到可運行對象 - java

試圖繞過Java并發問題,并且很難理解線程池,線程以及它們正在執行的可運行“任務”之間的關系。如果我創建一個有10個線程的線程池,那么我是否必須將相同的任務傳遞給池中的每個線程,或者池化的線程實際上只是與任務無關的“工人無人機”可用于執行任何任務?無論哪種方式,Executor / ExecutorService如何將正確的任務分配給正確的線程? 參考方案 …Java:我可以在Hashmaps中使用數組嗎? - java

我可以在Hashmaps中使用數組嗎?如果是這樣,則聲明這種哈希圖的確切語法是什么?謝謝 參考方案 數組也是對象。甚至像int[]這樣的原始數組。Map map = new HashMap();JAVA:字節碼和二進制有什么區別? - java

java字節代碼(已編譯的語言,也稱為目標代碼)與機器代碼(當前計算機的本機代碼)之間有什么區別?我讀過一些書,他們將字節碼稱為二進制指令,但我不知道為什么。 參考方案 字節碼是獨立于平臺的,在Windows中運行的編譯器編譯的字節碼仍將在linux / unix / mac中運行。機器代碼是特定于平臺的,如果在Windows x86中編譯,則它將僅在Win…

總結

以上是生活随笔為你收集整理的java类获取声明,获取用于MethodInvocation的实际类而不是声明类 - java的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。