问题标签 [reflect]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
291 浏览

json - 使用反射迭代 json

我正在尝试在我的 golang 项目中使用休息端点。JSON 结构非常大并且是半结构化的,所以我使用反射来迭代它并获取我感兴趣的信息。

这是我解组响应的方式:

但我坚持的部分是 - 我正在遍历一片地图(我认为),但我无法获得地图的键或值。这是有问题的代码。

当我运行代码时,显示的值看起来像一张地图:

种类是:

我尝试了各种方法,例如:

但代码恐慌:

抱歉,我对 golang 有点陌生,但在涉及任何反射类型编程时,我使用过其他静态类型语言,主要是 Java。

我的问题是如何将此接口转换为地图或某种具体类型,以便我可以使用它。任何帮助将不胜感激。

0 投票
1 回答
48 浏览

c# - C#为什么不能从ioc获得正确的实例,当我使用反射来注册类时

我想将 dll 中的类注册到 IOC,但是当我从 IOC 获取实例时,它返回一个空值。如Version_2下面的代码。但是如果我使用 Version_1,它将返回一个正确的实例。

代码如下:

我得到实例的代码如下:

我想知道这两个版本有什么区别,请。

0 投票
1 回答
104 浏览

go - 如何简化switch语句

我有一个解码器函数,它接受一个字节切片reflect.Kind并返回一个接口和一个错误。当在代码的其他部分使用该接口时,该接口将被断言。有没有办法简化我的 switch 语句,这样我就不必在每种情况下重复 NewReader、Read 和错误处理?

我现在拥有的:

我在找什么:

我知道这不会起作用,因为ret仅在 switch 案例的范围内定义并且在它之外丢失了。

0 投票
2 回答
360 浏览

go - 如何更新任意go结构的所有字符串字段?

我尝试编写一个函数来更新任意结构的所有字符串字段,如下所示:

但是这个函数只能更新特定的字段。我试试这个:

  1. fieldValue.SetString() 因为 fieldValue.CanSet()==false 而得到“panic: reflect: reflect.flag.mustBeAssignable using unaddressable value”。
  2. reflect.ValueOf(&obj).Elem().FieldByName(fieldKey).SetString("fieldCleanString2 set name") 也失败了,得到“panic: reflect: call of reflect.Value.FieldByName on interface Value”。

并调用 SetStringField2(&student) 得到“恐慌:反映:在 ptr 值上调用 reflect.Value.NumField”

那么,还有其他方法可以完成这项工作吗?

0 投票
0 回答
202 浏览

javascript - Javascript:在父类的构造函数中访问子类的元数据

我想在超级调用之前访问其父构造函数中子类的元数据。

请参见以下示例:

有没有办法将Child类的元数据传递给BaseBase类?

我想我可以访问Child构造函数中的元数据并将其传递给构造函数调用Base,但是我有许多不同的 Childs,我想避免为所有它们定义一个构造函数。

0 投票
2 回答
181 浏览

java - Java 通用类< ? 扩展接口>作为参数

我做了一个方法来检查一个类是否实现了一个接口。我希望我的方法只接受通用接口而不是所有类对象。

方法

由于 Test.class 和 Test2.class 不是 2d 参数上的接口,我希望它出现编译错误,因为 2d 参数必须是接口类

可接受的使用我的方法

我试过的

我目前检查参数中的类是否是接口然后抛出异常。如果它不是接口,我宁愿强迫人们不能调用该方法开始

我知道 Annotations 和 Enum 对象可用作类签名,以确保人们正确使用参数,但我似乎找不到接口本身的参数。

有人告诉我泛型不支持接口或抽象类类型即使在 jre 9-13+ 中也是如此

0 投票
1 回答
271 浏览

go - 有没有办法在 go 中处理通用函数

我是新手,想实现一个接收任务的调度程序(即间隔+处理程序)。我陷入了应该获取处理程序的部分,因为 go 是一种静态语言(我无法获得通用函数签名)。我想出了以下解决方案:每个“处理程序”函数都将被空接口包装:

这将导致以下结构用于保存处理程序及其参数:

任务执行将通过以下方式调用:

我的问题是这是处理泛型函数的正确方法,还是我缺少更惯用的解决方案?谢谢。

0 投票
2 回答
2421 浏览

go - 反映运行时错误:在零值上调用 reflect.flag.mustBeAssignable

我在去操场上测试这个代码片段,我的目标是使用反射从一个对象获取字段,然后将值设置为另一个对象

它给出了一个非常奇怪的错误:

如何解决?

0 投票
1 回答
136 浏览

go - 在 Go 中,如何检查接口是否实现了结构的所有导出方法?

我正在开发一个 Go 库,我在其中使用该interfacer工具(https://github.com/rjeczalik/interfaces)从结构创建接口,然后运行moqhttps://github.com/matryer /moq ) 为该接口生成一个模拟对象。现在我想编写一个单元测试,如果有人在没有更新接口和模拟的情况下将导出的方法添加到结构中,该测试将失败。

在高层次上,在我看来,我可以reflect.Value同时获取接口和结构并调用NumMethod()它们,然后检查数字是否相等。然而,我正在努力实现这个想法。

例如,如果我尝试这个:

我可以调用 get the number of methods person,但不是 of the personInterface,因为这会因错误消息而恐慌

reflect: 在零值上调用 reflect.Value.NumMethod

这是完整的错误:

如何获得由 实现的方法的数量interface,更一般地说,我将如何检查接口是否实现了结构的所有导出方法?

0 投票
1 回答
240 浏览

pointers - 如何使用反射读取指向切片的指针的值?

我正在尝试使用反射访问切片指针的值。

reflect.ValueOf(&n).Elem().Field(3).Slice(0, 1).Elem().Field(0)应该工作,但它没有。

我应该怎么做呢?