我有一個加載第三方類文件(我沒有寫的類)的Java程序並執行它們。這些類通常使用java.util.Random
,默認情況下,每次實例化時都會生成隨機起始種子值。由於可重複性的原因,我希望每次都給這些類別提供相同的起始種子,只能根據我的判斷進行更改。我如何向java.util.Random提供第三方類中的特定種子?
這裏有一些明顯的解決方案,以及爲什麼他們不工作:
在第三方類文件使用不同的Random類。這裏的問題是我只加載類文件,並且無法修改源文件。
使用自定義類加載器來加載我們自己的Random類而不是JVM的版本。這種方法將不起作用,因爲Java不允許類加載器覆蓋
java
包中的類。替換掉我們自己的rt.jar的
java.util.Random
實現,或者將文件放入JVM的可信位置。這些方法要求應用程序的用戶在他們的機器上安裝JVM,並且不好。將自定義
java.util.Random
類添加到bootclasspath。雖然這在技術上是可行的,但對於這個特定的應用程序來說,這是不切實際的,因爲這個應用程序是爲最終用戶從IDE運行而設計的。我想讓用戶運行該應用程序方便,這意味着強制他們設置他們的bootclasspath是一個痛苦。我不能在腳本中隱藏這一點,因爲它打算從像Eclipse的IDE運行(爲了便於調試。)
所以,我該怎麼辦呢?
Cha修改bootclasspath是有效的,但需要修改Java程序的運行方式。如果你可以控制某人啓動程序的方式,這很好,例如一個啓動腳本,但在我的情況下,用戶通常從IDE內運行,並且必須手動執行,這並不好。 – adum 2008-09-20 01:12:57