我知道在枚举类上调用.values()会给出一系列枚举实例。但是,它不适用于通用枚举类。为什么会这样,我该怎么做才能获得相同的功能?
class EnumEditActivity<E: Enum<E>>() {
var value: E? = null
var allValues: Array<E> = E.values()
}
Run Code Online (Sandbox Code Playgroud)
如果我在普通枚举上调用values(),则可以正常工作:
enum class Gender {
male, female
}
for (value in Gender.values()) {
println(value.name)
}
Run Code Online (Sandbox Code Playgroud)
印刷品:
male
female
Run Code Online (Sandbox Code Playgroud)
一些答案建议做这样的事情:
enum class SomeEnum {
one, two
}
class EnumEditActivity<E: SomeEnum>() {
var value: E? = null
val values = listCases<SomeEnum>()
inline fun <reified E: SomeEnum> listCases() = (E::class.java).enumConstants.toList()
}
Run Code Online (Sandbox Code Playgroud)
这是行不通的,因为它不是动态的:它始终只会获取SomeEnum的用例,因此没有通用类的意义。您不能将SomeEnum之外的任何其他枚举传递给该类,因为一个枚举不能从另一个枚举继承。
我认为在Kotlin中这是不可能的。我现在只是在定义类,因此它要求您在类初始值设定项中传递枚举实例的数组:
class EnumEditActivity<E>(val values: Array<E>)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Google Secrets Manager API 和 Firebase 函数之间的集成将环境变量加载到我的 Firebase 函数中,但是它们全部显示为未定义。我之前使用的是 .env。文件来加载这些变量,在我尝试这个之前,它工作得很好,但现在也不起作用!我正在使用 Node.js。
为了在 Secrets API 上设置机密,我运行了:
firebase functions:secrets:set MY_SECRET
Run Code Online (Sandbox Code Playgroud)
我通过在每个秘密上运行以下命令来验证秘密是否已成功设置:
firebase functions:secrets:access MY_SECRET
Run Code Online (Sandbox Code Playgroud)
我定义我的功能如下index.ts:
import * as functions from 'firebase-functions'
import apiApp from "./api/api"
const REGION = "my region as a string"
const secrets = ["SERVICE_ACCOUNT"]
export const api = functions
.region(REGION)
.runWith({ secrets })
.https.onRequest(apiApp)
Run Code Online (Sandbox Code Playgroud)
在代码中,我使用process.env.MY_SECRET. 但是,当我运行firebase serve(在 Firebase 模拟器中运行)或 时firebase deploy,我总是会收到此错误,后跟由 env 变量产生的堆栈跟踪undefined:
Error: Error occurred while parsing …Run Code Online (Sandbox Code Playgroud) javascript firebase google-cloud-functions google-secret-manager
我正在使用 MongoDB v4.4。我的文档结构如下所示:
{
_id: ObjectId("..."),
photos: ["image1.png", "image2.png"]
},
{
_id: ObjectId("..."),
photos: ["image3.png", "another_image.png, image5.jpg"]
},
{
_id: ObjectId("..."),
photos: ["image_name.jpg", "image2.jpg"]
},
Run Code Online (Sandbox Code Playgroud)
我正在尝试将包含“.png”的所有字符串更改为“.jpg”。
我已经尝试过以下方法:
db.users.updateMany({
photos: { $regex: /.png/ }
}, [{
$set: {
"photos.$[]": {
$replaceOne: {
input: "photos.$[]", find: ".png", replacement: ".jpg"
}
}
}
}])
Run Code Online (Sandbox Code Playgroud)
这会返回错误:
MongoServerError: Invalid $set :: caused by :: FieldPath field names may not start with '$'.
Run Code Online (Sandbox Code Playgroud)