[英]I'm getting an error here when I call my getChoice() method, and I don't know why
[英]I don't know why I'm getting an error simply by creating a new Clock object
我收到一條錯誤消息,指出“無法實例化時鍾類型”,但我不知道為什么。
import java.time.Clock;
public class TS1 {
public long getTime(){
Clock c = new **Clock**(); //Error occurs here for bold Clock
return c.millis();
}
}
這種抽象的主要目的是允許在需要時插入備用時鍾。 應用程序使用對象而不是靜態方法來獲取當前時間。 這可以簡化測試。
要使用抽象Clock
類的millis()
方法,您不必擴展它,您可以使用java.time 包中的給定實現。 例如,您可以聲明以下方法:
import java.time.Clock;
public class App {
public static long getMillis(Clock clock){
return clock.millis();
}
}
在您的應用程序中,您可以獲得系統時鍾實現,而不是使用對System.currentTimeInMillis()
的直接和靜態調用:
Clock systemClock = Clock.systemUTC();
System.out.println(getMillis(systemClock));
此應用程序代碼取決於操作系統時鍾,其結果因每次運行時間而異。
在您的測試代碼中,您可以使用固定時鍾實例,因此無論測試時間如何,結果都是確定性和可預測的(當然,對於許多測試場景,您將使用模擬對象):
import static org.junit.Assert.*;
import org.junit.Test;
import java.time.Clock;
import java.time.Instant;
import java.time.ZoneOffset;
@Test public void checkSampleUTCTime(){
Clock fixedClock = Clock.fixed(Instant.parse("2016-04-21T11:54:20.00Z"), ZoneOffset.UTC);
assertEquals(1461239660000L,App.getMillis(fixedClock));
}
此外,有些人會說 joda time DateTimeUtils
類( 請參閱 javadoc )是更好的選擇 - 因為您可以使用setCurrentMillisFixed()
和setCurrentMillisSystem()
來替代系統時鍾行為,而不是java.time.Clock
依賴注入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.