小编mac*_*tch的帖子

检查原始字段的类型

我正在尝试确定对象上字段的类型.当它传递给我时,我不知道对象的类型,但我需要找到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.

有任何想法吗?

java reflection primitive

40
推荐指数
4
解决办法
6万
查看次数

即使离线被禁用,AWS AppSync 查询也会返回缓存的响应

我有一个使用 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)

amazon-web-services apollo apollo-client aws-appsync

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