2016-01-13 11 views
10

Döngü için birçok eski stilin yerine Java 8 akışları kullanıyorum ve bir grup sonuçla özet istatistikleri üretin.IntStream ne zaman kapalı? SonarQube S2095 IntStream için yanlış bir pozitif mi?

int messages = IntStream.rangeClosed(0, 7).map(ids::get).reduce(Integer::sum).getAsInt(); 

Not: Örneğin ben yukarıda göstermek sayım yapmak için başka yolları da vardır biliyorum. Sorumu açıklamak için böyle yapıyorum.

SonarQube 5.3'ü Java 3.9 eklentisiyle kullanıyorum. Bu yapılandırmada, yukarıdaki kod satırı bana S2095 kalamar kuralının ihlali verir: "Kaynaklar kapatılmalıdır." Otomatik Kapanabilir (ör. FileInputStream) açılıp açılmadığını, ancak asla kapanmadığını görmeyi beklediğim sonuç budur.

Yani benim sorum şu: Terminal işlemi reduce akışı kapatıyor mu? Olmalı mı? Yoksa kalamar yönetiminde bu yanlış bir pozitif mi?

+0

'' IntStream'' tarafından '' 'BaseStream''' sınıfından miras alınan' '' OnClose (Runnable closeHandler) '' metoduna sahiptir. Bu işleyici kullanılarak akış kapatıldığında veya kapatılmadığında inceleyebilirsiniz. – saka1029

+0

Monitörü https://jira.sonarsource.com/browse/SONARJAVA-1478 – PaoloC

cevap

8

AutoCloseable arabirimi yalnızca try-with-resources içinde çalıştığı için kapalı değil. o AutoCloseable arayüzünde javadoc yılında söylediğimiz gibi bu kapatma işlemi IntStream için tamamen gereksizdir: Ancak

gibi java.util.stream.Stream gibi tesisleri kullanırken o desteği G/Ç tabanlı olmayan ben hem G/Ç tabanlı olmayan formları kullanırken, O-tabanlı formlar, kaynaklarla çalışmayı deneyin genel olarak gereksizdir.

Yani evet S2095 IntStream için yanlış pozitif olduğunu. Umarım bu, SONARJAVA-1478

+0

Bu yüzden akışın ne zaman kapalı olduğuyla ilgili sorularım hala geçerli. Bunun kalamar yönetiminde yanlış bir pozitif olduğunu mu söylüyorsun? Yoksa tüm noktanın tartışıldığı mı söylüyorsun? –

+3

@BobCross Bu gerçekten yanlış bir pozisyondur. 'AutoClosable' arayüzü Java 8'de değişti ve şimdi "AutoClosable" olan bir şey aslında kapatmak için bir kaynak tutamayabilir. – Tunaki

+5

Statik analiz hataları algılamıyor; Böcek olabilecek şeyleri algılar ve bakmaya değer olabilir. Bu durumda, ona baktınız ve bir hata olmadığını, çünkü akışın serbest bırakılması gereken kaynaklara sahip olmadığından. –

İlgili konular