是否有可能改變/添加行爲到一個靜態方法?我的意思是像AspectJ那樣添加/改變行爲(之前,之後)。我一直在使用Scala's Stackable Trait Pattern來改變像AspectJ這樣的類和特性的方法的行爲(但我沒有使用它或打算使用AspectJ,只是想模擬相同的功能),但這不適用於對象,因此,對於靜態方法也沒有)。你知道一種方法來使這項工作?預先感謝任何幫助/建議。如果您需要示例或其他內容,請告訴我。斯卡拉 - 改變/添加行爲到一個靜態方法
1
A
回答
-1
Scala並沒有真正的靜態方法。編譯器將創建靜態方法,但這些不是可見的語言功能。對於object
,Scala爲Java互操作創建靜態方法,他們所做的只是調用單例實例上的相應方法。對於具有具體方法的特徵,Scala將這些方法編譯爲靜態方法,這些方法是從每個擴展特徵的類中創建的實例方法調用的。
爲了在object
上使用AspectJ,必須給它一個該對象的類名稱。這可以是它在Scala中的任何名稱,但是會附加一個$
。 List$
是List
的伴隨對象的類名。要將AspectJ與特徵一起使用,請將$class
附加到特徵名稱以獲取特徵的靜態方法所在的類。
相關問題
- 1. 斯卡拉最終靜態變量
- 2. 斯卡拉2.8:行爲改變了嗎?
- 3. 斯卡拉:添加
- 4. 斯卡拉方法的漸近行爲
- 5. 斯卡拉foldLeft添加一個元素?
- 6. 斯卡拉方法返回一個Future
- 7. 斯卡拉執行哈斯克爾最後一個方法
- 8. 斯卡拉可變地圖添加
- 9. 怎樣的方法添加到模擬斯卡拉上
- 10. 用靜態方法更改一個靜態變量
- 11. 添加流在斯卡拉
- 12. 添加在斯卡拉
- 13. 斯卡拉的靜態測試
- 14. 添加斯卡拉文件到父包
- 15. 斯卡拉:奇怪添加到地圖
- 16. 斯卡拉collection.Map不能添加到
- 17. 斯卡拉 - 添加不應用到INT
- 18. 斯卡拉模糊的變量名中的一個方法
- 19. 斯卡拉添加兩個列表
- 20. 斯卡拉追加到一個可變的LinkedList
- 21. 通過添加靜態方法改變一個可序列化的類,java
- 22. 在斯卡拉
- 23. 斯卡拉方法參數
- 24. 斯卡拉流方法TakeWhile
- 25. 斯卡拉 - 方法構造
- 26. 斯卡拉:通用方法
- 27. 斯卡拉unapply方法
- 28. 斯卡拉 - 方法優先
- 29. 分配方法斯卡拉
- 30. 從斯卡拉
「對於具有具體方法的特徵,Scala將這些方法編譯爲靜態方法」,是指在伴隨對象中定義的方法,還是將特徵中的方法轉換爲靜態方法?(這樣,這些方法可以靜態地進行處理)。我不打算使用AspectJ,只想捕獲對象中定義的方法的調用,並在執行之前或之後添加一些內容。有了類和特性,你可以用Stackable Trait Pattern來做到這一點。我想你的答案唯一的解決方案是定義我想要的特質和(繼續下一個評論) –
(繼續)的方法,並使用伴侶對象將其轉換爲靜態方法。不知道該模式是否可以工作,因爲我需要將擁有該方法的類與覆蓋它的行爲疊加在一起的類中,但該方法將從伴隨對象中調用,而不是該類的實例。所以沒有mixin可以完成。 –
是的,特質中的具體方法成爲靜態方法。在我看來,你應該寫一個特質,並將其混合到伴侶對象中,而不是類本身,儘管更具體的例子可以幫助回答你的問題。 – wingedsubmariner