Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 科特林:期待门贝尔声明,而我似乎已经这样做了_Java_Kotlin_Lambda_Kotlin Coroutines - Fatal编程技术网

Java 科特林:期待门贝尔声明,而我似乎已经这样做了

Java 科特林:期待门贝尔声明,而我似乎已经这样做了,java,kotlin,lambda,kotlin-coroutines,Java,Kotlin,Lambda,Kotlin Coroutines,我发现了一些带有相同错误消息的问题,但据我所知,我已经正确地声明了它 以下是Kotlin中的全部代码: package com.mybank.service import org.reactivestreams.Publisher import com.mongodb.client.result.InsertOneResult import com.mongodb.reactivestreams.client.MongoClients import com.mongodb.reactivest

我发现了一些带有相同错误消息的问题,但据我所知,我已经正确地声明了它

以下是Kotlin中的全部代码:

package com.mybank.service

import org.reactivestreams.Publisher
import com.mongodb.client.result.InsertOneResult
import com.mongodb.reactivestreams.client.MongoClients
import com.mongodb.reactivestreams.client.MongoClient
import com.mongodb.reactivestreams.client.MongoCollection
import com.mongodb.reactivestreams.client.MongoDatabase
import java.util.Arrays
import org.bson.Document

class test {


    //MongoClient mongoClient = MongoClients.create();
    var mongoClient: MongoClient = MongoClients.create("mongodb://root:q@localhost:27017")
    var database: MongoDatabase = mongoClient.getDatabase("mydb")
    var collection: MongoCollection<Document> = database.getCollection("mycollection")

    var doc: Document = Document("name", "MongoDB")
            .append("type", "database")
            .append("count", 1)
            .append("versions", Arrays.asList("v3.2", "v3.0", "v2.6"))
            .append("info", Document("x", 203).append("y", 102))


    //publisher decalred and initialized
    var publisher: Publisher<InsertOneResult> = collection.insertOne(doc)

    publisher *** why publisher isn't initialized yet???
***编辑

package com.mybank.service

import org.reactivestreams.Publisher
import com.mongodb.client.result.InsertOneResult
import com.mongodb.reactivestreams.client.MongoClients
import com.mongodb.reactivestreams.client.MongoClient
import com.mongodb.reactivestreams.client.MongoCollection
import com.mongodb.reactivestreams.client.MongoDatabase
import java.util.Arrays
import org.bson.Document
import javax.inject.Singleton

class test {


    //MongoClient mongoClient = MongoClients.create();
    var mongoClient: MongoClient = MongoClients.create("mongodb://root:q@localhost:27017")
    var database: MongoDatabase = mongoClient.getDatabase("mydb")
    var collection: MongoCollection<Document> = database.getCollection("mycollection")

    var doc: Document = Document("name", "MongoDB")
            .append("type", "database")
            .append("count", 1)
            .append("versions", Arrays.asList("v3.2", "v3.0", "v2.6"))
            .append("info", Document("x", 203).append("y", 102))


    //publisher decalred and initialized
    var publisher: Publisher<InsertOneResult> = collection.insertOne(doc)
}
package com.mybank.service
导入org.reactivestreams.Publisher
导入com.mongodb.client.result.InsertOneResult
导入com.mongodb.reactivestreams.client.MongoClients
导入com.mongodb.reactivestreams.client.MongoClient
导入com.mongodb.reactivestreams.client.MongoCollection
导入com.mongodb.reactivestreams.client.MongoDatabase
导入java.util.array
导入org.bson.Document
导入javax.inject.Singleton
课堂测试{
//MongoClient MongoClient=MongoClients.create();
var mongoClient:mongoClient=MongoClients.create(“mongodb://root:q@本地主机:27017“)
var数据库:MongoDatabase=mongoClient.getDatabase(“mydb”)
var-collection:MongoCollection=database.getCollection(“mycollection”)
var文件:文件=文件(“名称”、“MongoDB”)
.append(“类型”、“数据库”)
.append(“count”,1)
.append(“versions”,Arrays.asList(“v3.2”,“v3.0”,“v2.6”))
附加(“信息”,文件(“x”,203)。附加(“y”,102))
//发布服务器已标记并初始化
var publisher:publisher=collection.insertOne(doc)
}
然后在另一节课上

@Singleton
class TransactionService(){

    @Inject
    lateinit var test: test

    fun postDebitTransaction(debit: String) : String{

        test.publisher.subscribe(
                object x: Subscriber<InsertOneResult> {
                    override fun onSubscribe(s: Subscription) {
                        s.request(1) // <--- Data requested and the insertion will now occur
                    }

                    override fun onNext(result: InsertOneResult) {
                        println("Inserted: $result")
                    }

                    override fun onError(t: Throwable) {
                        println("Failed")
                    }

                    override fun onComplete() {
                        println("Completed")
                    }
                })

        return "posted"
    }
}
@Singleton
类TransactionService(){
@注入
lateinit var测试:测试
趣味postDebitTransaction(借方:字符串):字符串{
test.publisher.subscribe(
对象x:订户{
覆盖订阅的乐趣(s:订阅){

s、 request(1)//编译器不会告诉您成员未初始化,而是告诉您,如果未将函数作为成员声明的一部分,则不允许调用类主体中的函数

e、 g

Java也有同样的行为。
java示例之所以能够工作,是因为代码在
main
方法中,而不是在类主体中。

编译器不会告诉您成员未初始化,而是告诉您,如果未将函数作为成员声明的一部分,则不允许调用类主体中的函数

e、 g

Java也有同样的行为。
java示例之所以有效,是因为您的代码在
main
方法中,而不是在类主体中。

集合.insertOne(doc)
的返回类型是什么?通过控制+单击我看到发布者insertOne(TDocument var1)来深入了解;因此我知道返回类型是Publisher。control+单击Publisher我看到公共界面Publisher{public void subscribe(SubscriberHmm…collection.insertOne(doc)的返回类型是什么?通过control+单击我看到Publisher insertOne(TDocument var1)更深入;所以我知道返回类型是Publisher。control+单击Publisher,我会看到公共界面Publisher{public void subscribe(SubscriberHmm…谢谢。我不明白你的意思。如果我正确理解了你对val three=3.toString()的理解,我对var Publisher:Publisher=collection.insertOne(doc)的理解是的,但不允许在类主体中调用发布者。订阅。我将该类注入其他单例类:@inject lateinit var test:test,然后我至少可以测试。发布者。订阅。但是我得到类型不匹配。必需:订阅者!。我将在上面添加整个代码。请注意,您是否可以在告诉我我在Kotlin中做错了什么?@JimC你的代码的问题是你没有在Kotlin代码中声明
main()是的,但不允许在类主体中调用发布者。订阅
。我将该类注入其他单例类:@inject lateinit var test:test,然后我至少可以测试。发布者。订阅。但是我得到类型不匹配。必需:订阅者!。我将在上面添加整个代码。请注意,您是否可以在告诉我我在Kotlin中做错了什么?@JimC您的代码的问题是您没有在Kotlin代码中声明
main()
函数
package com.mybank.service

import org.reactivestreams.Publisher
import com.mongodb.client.result.InsertOneResult
import com.mongodb.reactivestreams.client.MongoClients
import com.mongodb.reactivestreams.client.MongoClient
import com.mongodb.reactivestreams.client.MongoCollection
import com.mongodb.reactivestreams.client.MongoDatabase
import java.util.Arrays
import org.bson.Document
import javax.inject.Singleton

class test {


    //MongoClient mongoClient = MongoClients.create();
    var mongoClient: MongoClient = MongoClients.create("mongodb://root:q@localhost:27017")
    var database: MongoDatabase = mongoClient.getDatabase("mydb")
    var collection: MongoCollection<Document> = database.getCollection("mycollection")

    var doc: Document = Document("name", "MongoDB")
            .append("type", "database")
            .append("count", 1)
            .append("versions", Arrays.asList("v3.2", "v3.0", "v2.6"))
            .append("info", Document("x", 203).append("y", 102))


    //publisher decalred and initialized
    var publisher: Publisher<InsertOneResult> = collection.insertOne(doc)
}
@Singleton
class TransactionService(){

    @Inject
    lateinit var test: test

    fun postDebitTransaction(debit: String) : String{

        test.publisher.subscribe(
                object x: Subscriber<InsertOneResult> {
                    override fun onSubscribe(s: Subscription) {
                        s.request(1) // <--- Data requested and the insertion will now occur
                    }

                    override fun onNext(result: InsertOneResult) {
                        println("Inserted: $result")
                    }

                    override fun onError(t: Throwable) {
                        println("Failed")
                    }

                    override fun onComplete() {
                        println("Completed")
                    }
                })

        return "posted"
    }
}
class Foo {
    // not allowed
    3.toString()
}

class Bar {
    // prefectly fine
    val three = 3.toString()
}