我想知道是否有一個實例在運行時添加到特徵中,可以將特徵從實例中刪除,因此它可以像最初一樣運行。有沒有辦法從Scala中的實例中刪除特質?
2
A
回答
3
這是不可能的。該實例屬於特徵代碼所屬的類。
如果JVM支持「class + traits」之類的東西,那麼理論上可以恢復它。
4
在編譯時將特徵與類組合在一起。所以在運行時不可能添加/刪除特徵。
對於你的具體情況,考慮增加一個方法到類:
class Foo(val a: Object, val b: Object, ...) {
def original() = new Foo(a, b, ...)
}
然後就可以調用instance.original()
找回未受到任何特質的對象的副本。
+0
這是一個好主意,但只有當這個類是不可變的。 – 01es
相關問題
- 1. WPF - 有沒有辦法從Canvas.Children中刪除特定的孩子?
- 2. 有沒有辦法從插槽中刪除特定的信號
- 3. 有沒有辦法在2d數組中刪除特定的行?
- 4. 有沒有辦法從ASP.NET MVC中的鏈接中刪除ID
- 5. 有沒有辦法在ec2實例中獲取實例ID
- 6. C - 有沒有辦法從我的窗口中刪除mvwprintw? (Ncurses)
- 7. 有沒有辦法從dojo的NumberSpinner中刪除逗號?
- 8. 有沒有辦法從基礎實例創建派生實例?
- 9. 有沒有辦法在Scala的REPL中使用ctrl-d作爲前向刪除?
- 10. 有沒有辦法從StreamReader中刪除第一行
- 11. 有沒有辦法從UISearchDisplayController中刪除「No Results」標籤?
- 12. 有沒有辦法從UITableView中刪除分隔線?
- 13. 有沒有辦法從字符串中刪除字符? Java
- 14. 有沒有辦法從隊列中刪除一個項目?
- 15. EventKit:有沒有什麼辦法從EKEventEditViewController中刪除受邀者
- 16. 有沒有辦法從pubnub應用程序中刪除設備?
- 17. 有沒有辦法從CSS規則中刪除屬性?
- 18. 有沒有辦法從一個數據庫中刪除'sysmessages'表?
- 19. 有沒有辦法從文本文件中刪除特殊字符?
- 20. 有沒有辦法從Ruby中的實例調用私有的類方法?
- 21. Ruby - 有沒有辦法獲得一個特徵類的實例?
- 22. 有沒有辦法重用Job實例?
- 23. 有沒有辦法刪除window.open事件?
- 24. 有沒有辦法刪除FILE_FLAG_DELETE_ON_CLOSE?
- 25. 爲什麼Scala沒有從特質識別方法
- 26. 有沒有辦法跟蹤已經刪除的實體?
- 27. 有沒有辦法從Instruments(XCode)的命令行實例中刪除授權提示?
- 28. Sequelize:有沒有辦法從實例方法更新值
- 29. 有沒有辦法去除ggplot2中圖例的邊框?
- 30. 有沒有辦法在Rails中運行DelayedJob的多個實例?
您不能在運行時添加特徵。所以我不確定你在問什麼。 –
你可以給你一個例子,說明你在運行時將一個特徵添加到一個實例嗎?我問,因爲,據我所知,性狀只能在編譯時混合使用。有關它如何在JVM級別工作的詳細信息,請參閱此答案:http://stackoverflow.com/questions/7057166/how-does-the-scala-compiler-handle-concrete-trait-methods/7057723#7057723 –
他是大概想着「新Foo與酒吧」。這種模式看起來像一個動態混合,但它都是靜態的。它只是創建一個將Bar與Foo混合的匿名類。 –