我正在尝试确定对象上字段的类型.当它传递给我时,我不知道对象的类型,但我需要找到longs的字段.很容易区分盒装,Long但原始图像long似乎更难.
我可以确保传递给我的对象只有Longs,而不是原语,但我宁愿不.所以我拥有的是:
for (Field f : o.getClass().getDeclaredFields()) {
Class<?> clazz = f.getType();
if (clazz.equals(Long.class)) {
// found one -- I don't get here for primitive longs
}
}
Run Code Online (Sandbox Code Playgroud)
一种似乎有用的hacky方式是:
for (Field f : o.getClass().getDeclaredFields()) {
Class<?> clazz = f.getType();
if (clazz.equals(Long.class) || clazz.getName().equals("long")) {
// found one
}
}
Run Code Online (Sandbox Code Playgroud)
如果有的话,我真的想要一个更干净的方法.如果没有更好的方法,那么我认为要求我收到的对象只使用Long(不是long)将是一个更好的API.
有任何想法吗?
我有一个使用 AWS AppSync 的相当简单的节点应用程序。我能够成功运行查询和更改,但我最近发现,如果我运行查询两次,我会得到相同的响应 - 即使我知道后端数据已更改。在这种特殊情况下,查询由 lambda 支持,在深入研究时,我发现该查询似乎并未在网络上发送,因为每次运行查询时都不会触发 lambda - 只是第一次. 如果我使用控制台来模拟我的查询,那么一切运行正常。如果我重新启动我的应用程序,那么第一次运行查询时它可以正常工作,但连续查询每次只返回相同的值。
这是我的代码的一部分:
client.query({
query: gql`
query GetAbc($cId: String!) {
getAbc(cId: $cId) {
id
name
cs
}
}`,
options: {
fetchPolicy: 'no-cache'
},
variables: {
cid: event.cid
}
})
.then((data) => {
// same data every time
})
Run Code Online (Sandbox Code Playgroud)
编辑:尝试其他获取策略,例如network-only没有明显区别。
这是我设置客户端的方式,不是超级干净,但似乎有效:
const makeAWSAppSyncClient = (credentials) => {
return Promise.resolve(
new AWSAppSyncClient({
url: 'lalala',
region: 'us-west-2',
auth: {
type: 'AWS_IAM',
credentials: () => {
return credentials
}
},
disableOffline: …Run Code Online (Sandbox Code Playgroud)