我知道這可以在Ada中完成,但我是Java新手,不知道我是否可以這樣做。我想做一個從0到2pi的浮點子類型的弧度。超出範圍的值將被視爲超出範圍並通過約束錯誤。任何幫助表示讚賞!是否可以創建具有最小和最大範圍的浮點類型?
回答
commons.lang.math.Range只是指定範圍約束。它不代表該範圍內的價值(我認爲這是你想要的)。
您可以創建一個新類來保存該值並強制約束。你自己的程序會傳遞這個類的實例,從而獲得類型安全(強制執行約束)。調用其他API時,必須恢復發送並接受常規的double值。您可以在接受返回值之前再次檢查約束。
public class Radian extends Number {
private final double value;
public Radian(double value){
if (value < 0 || value >= 2 * PI)
throw new IllegalArgumentException(value + " is out of range");
this.value = value;
}
public double doubleValue(){
return value;
}
// ... and other methods in the Number interface
// don't forget equals and hashCode and toString
}
有內置的Java沒有Range對象,但你總是可以使用的東西,從阿帕奇百科全書http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/math/Range.html
Java沒有聲明一個基本類型的阿達樣型,具體而言沒有辦法來聲明是原始類型的子範圍的類型。
在Java中可以做的最好的事情是爲基元類型創建自定義包裝類,並讓包裝使用(純粹)運行時檢查來強制範圍約束。
如果所有的代碼都只使用包裝器,那麼幾乎可以獲得編譯時類型的安全性。當然,它必須與外部接口的部分必須依賴運行時檢查。 – Thilo 2010-10-29 04:50:14
問題在於範圍檢查;例如當你將兩個受約束的數字加在一起時。在Java中,這些檢查只能在運行時執行。在Ada中,智能編譯器可以在編譯時進行一些檢查;例如在涉及範圍類型的常量表達式中 – 2010-10-29 04:56:52
- 1. 具有兩個值(最小值和最大值)範圍的Seekbar
- 2. 確定最小/最大日期以創建日期範圍?
- 3. Java:最小和最大日期範圍
- 4. VB.NET是否可以創建具有新範圍的嵌入塊?
- 5. Haskell是否提供Int範圍的最小/最大常量?
- 6. famo.us輸入表面類型範圍最小/最大屬性
- 7. 如何創建具有最大和最小限制的Django FloatField?
- 8. C數據類型的最小保證大小/範圍
- 9. Android是什麼加速度計的最小和最大範圍
- 10. 角rzslider:最大值和最小值,最大值;範圍滑塊
- 11. 設置最小和最大範圍相對於窗口大小
- 12. 對最小和最大範圍的輸入類型編號進行驗證
- 13. 是否可以創建可以自動調整大小的點?
- 14. flotilla:具體日期範圍的最小/最大值
- 15. 範圍最小/最大查詢
- 16. 具有擴展範圍的浮點類型
- 17. 如何允許輸入類型編號在最小和最大範圍之外
- 18. 最大範圍
- 19. 尋找最小和最大正浮點數,一個系統可以代表
- 20. postgis postgis ST_makeline是否有最大數量的點可以創建一條直線?
- 21. 格式浮點數最小和最大小數位數
- 22. 均勻分佈的浮點值的最大範圍?
- 23. 具有最小和最大限制的可變高度的CSS
- 24. 的MySQL得到最大和最小範圍內出間隔
- 25. 獲取日期範圍中的最小和最大年份
- 26. 在最小和最大範圍表中查找值的位置
- 27. gnuplot:範圍內的最大值和最小值
- 28. jQuery UI的滑塊和最小/最大範圍
- 29. 範圍驗證器的最小值和最大值?
- 30. 獲取範圍的最小值和最大值
+1使這個不可變 – 2010-10-29 03:07:00
爲什麼你想這是不可變的?只是好奇。 – Xavier 2010-11-03 02:08:38
@ vlad003:爲什麼你想讓它變得可變? JDK中的所有Number類都是不可變的。 – Thilo 2010-11-03 03:01:43