2017-02-18 18 views
35

Java 8'de Duration sınıfa bakarak ve onu yok fark edilmiştir:Süre sınıfı neden 'toSeconds()' yöntemine sahip değil?

long toSeconds(); 

Ama bu günler, saat, dakika, Millis, Nanos almak için tüm diğer toXXXXX() sahiptir. Bu süre nesnesinde saniye sayısını döndüren bir getSeconds() yöntemini görüyorum. Süreyi istenen zaman birimi olarak almak için get(TemporalUnit unit) yöntemi de vardır. Ancak neden tutarlılık için toSeconds() yöntemini tutmuyorsunuz?

+0

" özel BigDecimal toSeconds() '?! –

+8

@CarlosHeuberger zaten bir özel bir yöntem var. Çünkü bir" toSeconds() yöntemi, "BigDecimal toSeconds()' basitçe başka bir şey çağrılabilir, ya da bir sonraki soru, 'BigDecimal toSeconds()' özel nedenidir. –

+0

@Andy, ancak bir "BigDecimal toSeconds()" olduğundan, bir "toSeconds()" –

cevap

46

inceleyelim:

Bu sınıf modeller saniye ve nanosaniye cinsinden bir miktar veya süre. temel olarak temsil edilen zaman miktarını saklamak için kullanılan birim saniye olduğu anlamına gelir

. Örneğin, 5 dakika ve 10 nanosaniye sürelerini saklamak için 300 (saniye) ve 10 (nanosaniye) depolanır. Bu nedenle, 'u saniyeye dönüştürmenize gerek yoktur. numaralı telefonu numaralı telefonu getSeconds() kullanarak alabilirsiniz.

Ne demek istediğimi burada görebilirsiniz? Diğer tüm yöntemler karşılık gelen birimler: gün, dakika, saat ... convertedTo anlamına gelen to ile başlar. Süreyi saniye cinsinden almak için bir dönüşüm yapmanız gerekmediğinden, süreyi saniye cinsinden döndüren yöntem get ile başlar.

+0

Buradaki açıklamanıza katılıyorum @Sweeper. Dahili olarak saniyeler ve nano saniyeler zaten ayrı değişkenlerde saklanır ve nano kısmı tam bir saniyeye dönüştürülemez, saniyeler olduğu gibi geri döndürülebilir. Diğer taraftan saniyeler nano saniyeye dönüştürülebilir, böylece dönüştürme için bir NNos yöntemi vardır. – Ali

+21

Bu, biraz garip bir argüman olsa da, kapsüllemenin * noktası * bir sınıfta uygulama ayrıntılarını gizlemektir. Sınıfın bir tüketicisi olarak, belgeleri okumam ve * dahili olarak * saniyeler ve nanosaniye kullandığını ve oradan bir toSeconds() 'a ihtiyaç duymadığımı anladığını öğrenmem gerekmemelidir. ve eğer bir noktada * sadece “nanosaniye” nin içsel bir temsilinin bir sebepten daha iyi bir uyum gösterdiği ortaya çıkarsa, sınıfın sahibi, dışarıdan görünen herhangi bir değişiklik yapmak zorunda kalmadan içsel temsili değiştirmekte özgür olmalıdır. –

+1

@ MichaelKjörling Duration sınıfında yer alan bir toSeconds() yöntemi olması gerektiğini (açıklamanızı okuduktan sonra) kabul ediyorum. Duration sınıfının belgelerini okuduktan sonra, getSeconds() öğesini toSecond() yerine kullanabileceğimi anladım, ancak sezgisel değildi. ToSeconds() yönteminin neden olmadığını belirlemek için bir teğet üzerinde gittim. Dokümanlarda okuduğum şeyleri unuttuğumda bu yazıyı tekrar ziyaret edeceğimi hissediyorum. Diğerlerinin bu tutarsızlığa rağmen verdikleri için mutluyum ve bir çözüm oluşturdum. – Ali

31

Bu kimin düzeltme Java 9 planlanıyor bilinen bir sorun: https://bugs.openjdk.java.net/browse/JDK-8142936

Yeni yöntem Java 9, toSeconds ekledi. Bakınız source code.

/** 
* Gets the number of seconds in this duration. 
* <p> 
* This returns the total number of whole seconds in the duration. 
* <p> 
* This instance is immutable and unaffected by this method call. 
* 
* @return the whole seconds part of the length of the duration, positive or negative 
*/ 
public long toSeconds() { 
    return seconds; 
} 
+3

OP'nin sorusunu yanlış anlamış mıyım? OP'nin 'getSeconds' toSeconds' olarak adlandırılmadığını sorduğunu düşündüm. sürenin farklı kısımlarını elde etmek için herhangi bir yöntem bulunmadığı ile ilgili gibi görünüyor. – Sweeper

+0

Bunun bir sorun olduğunu düşünmüyorum. Orijinal soruyu gönderme konusundaki düşüncem, neden tutarlılık için toSeconds eklenmediğiydi. Ancak, bunun altında @Sweeper tarafından açıklandığı gibi, bunlar benim için anlamlı olan dönüşümlerdir. GetSeconds yöntemi zaten saniye bölümünü döndürdüğünden, saniyelerle saniyeler arası süren bir yöntemin dahil edilmesi mantıklı değildir. – Ali

+7

Hata raporunun belirttiği gibi API'nin tutarlı olmadığı bir sorun: programcılar toSconds yöntemini arar çünkü diğer tüm yöntemler toXxx() olarak adlandırılır. –

5

Çünkü Duration

[...] modelleri saniye ve nanosaniye cinsinden bir miktar veya zaman miktarı [...]

nedenle iki yöntem sunar

"saniye-" hayır mantıklı yoktur. docs söylediklerine

+4

Süre için java belgelerine bakıldığında, toNanos() yönteminin yanı sıra getNano() yöntemi vardır. Birincisi, süreyi bu süre içinde toplam sayı olarak nano saniyeye dönüştürürken, ikincisi sürenin yalnızca nano kısmını alır. – Ali

1
http://tutorials.jenkov.com/java-date-time/duration.html den

Alıntı: Bir toSeconds() yöntemi yoksa

"Kendini soran olabileceğini Süresi saniye parçası olarak aynı olduğu için yoktur Sen saniye elde edebilirsiniz.. Daha önce açıklandığı gibi getSeconds() yöntemini kullanarak Sürenin parçası."

İlgili konular