Kotlin, nesneler için use
işlevini sağlar, ancak kaynakların tam Java eşdeğeriyle eşleşmesi için AutoCloseable
(ör. DB tarafından hazırlanmış ifadeler) düşünmeyi unutmuş gibi görünüyorlar. Ben KOTLIN konusunda yeniyim ve ben istiyorumKotlin'in kaynaklarla uğraşmaya çalışmayla ilgili kendi çözümüm
fun countEvents(sc: EventSearchCriteria?): Long {
return trywr(connection.prepareStatement("SELECT COUNT(*) FROM event")) {
var rs = it.executeQuery()
rs.next()
rs.getLong(1)
}
}
:
inline fun <T:AutoCloseable,R> trywr(closeable: T, block: (T) -> R): R {
try {
return block(closeable);
} finally {
closeable.close()
}
}
Sonra bunu bir sonraki şekilde kullanabilirsiniz:
sonraki "ev yapımı" çözüm uyguladık Kendi çözümümde önemli bir şey eksik olup olmadığını bilmek bana bir üretim ortamında sorunlar/kaçaklar verebilir.
onlar Java8 desteği uygulamak için hala olmasıdır dışı-box onlar – voddan
Her zaman olabilir JDK8 sınıflarını desteklemek için de, 'AutoClosable' desteklemeyen nedeni kopyalanan 'use' kaynağını kopyalayın ve 'Kapatılabilir 'seçeneğini' AutoCloseable 'olarak değiştirin (bkz. [ReadWrite.kt: 145-177] (https://github.com/JetBrains/kotlin/blob/8549ec7645ff6db4d5fede2c43034be66683561a/libraries/stdlib/src/ kotlin/io/ReadWrite.kt # L145-L177) – mfulton26
Desen için java 8 kullanmayı düşünün Burada bulabilirsiniz http://stackoverflow.com/a/43269795/2463695 –