小编mef*_*f27的帖子

为什么不能在通用枚举类上调用.values()?

我知道在枚举类上调用.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)

generics enums kotlin

6
推荐指数
1
解决办法
113
查看次数

为什么将环境变量加载到 Firebase 函数时出现未定义?

我正在尝试使用 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

5
推荐指数
1
解决办法
3141
查看次数

在 mongodb 中的字符串数组中查找并替换

我正在使用 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)

mongodb mongodb-query mongodb-update aggregation-framework

3
推荐指数
1
解决办法
2774
查看次数