Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package example
- import com.fasterxml.jackson.databind.JsonNode
- import com.fasterxml.jackson.databind.ObjectMapper
- import java.util.stream.Stream
- import java.util.stream.StreamSupport
- import org.w3c.dom.Document
- import org.w3c.dom.Element
- import org.w3c.dom.Node
- import org.w3c.dom.NodeList
- import javax.xml.parsers.DocumentBuilderFactory
- import java.io.ByteArrayInputStream
- import java.io.InputStream
- import java.io.StringReader
- data class Event(val id: Int)
- val stringToEvent: (String) -> Event = { s -> Event(s.toInt()) }
- val dummyToEvent: (Document) -> Event = { _ -> Event(1) }
- val jsonToEvent: (JsonNode) -> Event = { j -> Event(j.get("id").asInt()) }
- fun elementGen(opt: String): Any {
- return when(opt) {
- "string" -> "1"
- "json" -> {
- val mapper = ObjectMapper()
- mapper.readTree("{\"id\": 1 }")
- }
- "xml" -> {
- val xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<id>1</id>"
- val src = ByteArrayInputStream(xml.toByteArray())
- DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(src)
- }
- else -> throw RuntimeException("Option not supported")
- }
- }
- fun main(args : Array<String>) {
- val parser = when (args[0]) {
- "string" -> stringToEvent // I get
- // /home/gbenincasa/develop/ihmc/higherOrderFun/src/main/kotlin/Example.kt: (49, 11): Out-projected type 'Function1<*, Event>' prohibits the use of 'public abstract operator fun invoke(p1: P1): R defined in kotlin.Function1'
- // However tt builds if I remove this line
- "json" -> jsonToEvent
- "xml" -> dummyToEvent
- else -> throw RuntimeException("Option not supported")
- }
- print(parser(elementGen(args[0])))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement