Java 科特林:期待门贝尔声明,而我似乎已经这样做了
我发现了一些带有相同错误消息的问题,但据我所知,我已经正确地声明了它 以下是Kotlin中的全部代码: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
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()
}