小编And*_*niy的帖子

使用反射调用带有数组参数的方法

我试图编写一个方法,通过将一个字符串数组作为参数传递给该方法,从另一个类执行静态方法.

这就是我所拥有的:

public static void
executeStaticCommand(final String[] command, Class<?> provider)
{
    Method[] validMethods = provider.getMethods();

    String javaCommand = TextFormat.toCamelCase(command[0]);

    for (Method method : validMethods) {
        if (method.getName().equals(javaCommand)) {
            try {
                method.invoke(null, new Object[] { new Object[] { command } });
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                Throwable ex = e.getCause();
                ex.printStackTrace();
            }
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样:

String[] args = new String[] { "methodName", "arg1", "arg2" }; 
executeStaticCommand(args, ClassName.class);
Run Code Online (Sandbox Code Playgroud)

应执行此操作:

public class ClassName {
    public …
Run Code Online (Sandbox Code Playgroud)

java reflection method-invocation

12
推荐指数
1
解决办法
2万
查看次数

在JVM外部分配内存并在JVM中使用它

是否可以在JVM内存之外创建一个持久性内存对象,可以在JVM中作为对象使用,以便它能够在JVM重启后幸存下来?

特别的想法是我们可以在JVM之外分配内存,然后使用JNI接口来访问这个内存,并将一些Java数组与它相关联.

有人试图进行这样的黑客攻击吗?任何平台依赖都足够了.

例如,这有助于在重新启动JVM进程期间执行内存数据库加载的优化.

java memory jvm

11
推荐指数
2
解决办法
1088
查看次数

发布时Spring RestTemplate消息转换器优先级

什么是影响消息转换器优先级的最方便的方法Spring在POST时使用RestTemplate

使用案例:我想确保给定的实体作为JSON而不是例如XML进行POST restTemplate.postForEntity(url, entity, Void.class).

默认

默认情况下,实体将转换为XML,因为MappingJackson2XmlHttpMessageConverter它优先于MappingJackson2HttpMessageConverter.我的应用程序的默认转换器列表似乎是(Spring扫描类路径以查看可用的内容): 在此输入图像描述

选项1

您可以为给定RestTemplate实例显式配置消息转换器,如下所示restTemplate.setMessageConverters(Lists.newArrayList(new MappingJackson2HttpMessageConverter())).如果实例是共享的(例如Spring bean),这是不方便的,因为在一种情况下可能需要转换器X而在另一种情况下可能需要转换器Y.

选项2

您可以设置AcceptContent-TypeHTTP头文件明确在这种情况下,Spring将使用匹配的消息变换.缺点是你必须诉诸于RestTemplate.exchange而不是通过RestTemplate.postForEntity哪种方式:额外的代码,更少的便利.

HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
requestHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
HttpEntity requestEntity = new HttpEntity(entity, requestHeaders);
restTemplate.exchange(url, HttpMethod.POST, requestEntity, Void.class);
Run Code Online (Sandbox Code Playgroud)

选项3

这可能是我正在寻找的:)

java spring resttemplate

11
推荐指数
1
解决办法
2015
查看次数

"但是编译器不知道这个" - 这是什么意思?

我在java.util.ImmutableCollections课堂上遇到过这样的代码和评论:

static final class List0<E> extends AbstractImmutableList<E> {
    ...
    @Override
    public E get(int index) {
        Objects.checkIndex(index, 0); // always throws IndexOutOfBoundsException
        return null;                  // but the compiler doesn't know this
    } 
    ...
}
Run Code Online (Sandbox Code Playgroud)

为什么不throw new IndexOutOfBoundsException(...)呢?什么原因?

java java-9

11
推荐指数
1
解决办法
227
查看次数

"编译器消息文件坏了" - 我猜一个java编译器的bug?

拿代码:

public class A {
    public static void main(String[] args) {
        new Thread((new I() {})::test);
    }

    interface I {
        private void test() {}
    }
}
Run Code Online (Sandbox Code Playgroud)

并尝试编译.我收到:

A.java:5: error: invalid method reference
        new Thread(((new I() {}))::test);
                   ^
  compiler message file broken: key=compiler.misc.cant.resolve.args arguments=method, test, , , {4}, {5}, {6}, {7}
Run Code Online (Sandbox Code Playgroud)

哪里compiler message file broken似乎是不可理解的东西.这是一个错误还是我遗失了什么?

PS提交了一个错误:ID:9052216

java compiler-errors java-9

11
推荐指数
1
解决办法
2549
查看次数

导入静态没有包名称

考虑以下简单的代码示例:

public class TestStaticImport {
    static enum Branches {
        APPLE,
        IBM
    }
    public static void doSomething(Branches branch) {
        if (branch == APPLE) {
            System.out.println("Apple");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我们将尝试编译此代码,我们将收到错误消息:

java: cannot find symbol
  symbol:   variable APPLE
  location: class TestStaticImport
Run Code Online (Sandbox Code Playgroud)

这可以通过引入静态导入来解决enum:

import static ... TestStaticImport.Branches.*

但是在这个时刻(对我来说)难以理解的事情开始了:

这个解决方案工作正常,一切都很好编译,直到类TestStaticImport将被移动到空的根包,即没有任何

package blablabla; 在这个java文件的顶部;

代码行:import static TestStaticImport.Branches.*;在我的Intellij IDEA中突出显示为有效代码(IDE的名称无关紧要,仅供参考),但当我尝试编译此类代码时出现以下错误:

java: package TestStaticImport does not exist

所以,实际上有两个问题:

1)主要问题:为什么不能import static从空目录?

2)除了静态导入之外,允许使用其名称(即APPLE代替Branches.APPLE)的枚举字段的代码引用的另一种方式(如果存在)是什么?


PS请不要告诉我,空包装是丑陋的风格等等.这个问题只是理论问题.

java importerror

10
推荐指数
2
解决办法
3188
查看次数

从SOAP响应中获取HTTP状态代码

如何从结果中获取HTTP状态SOAPConnection.call()

java soap http

10
推荐指数
2
解决办法
4万
查看次数

已弃用的认可标准的替代方案覆盖机制和扩展机制

Java 8 Update 40(8u40)发行说明指出:

已弃用的标准覆盖机制和扩展机制已被弃用,可能会在将来的版本中删除.没有运行时更改.建议使用"认可标准覆盖"或"扩展"机制的现有应用程序远离使用这些机制.

还有一个问题澄清了Jigsaw(计划用于Java SE 9,AFAIK),这将以某种方式用模块化方法取代:

http://bugs.java.com/view_bug.do?bug_id=8065675

我知道Oracle现在想要弃用这些机制,因为它们不再支持它们在Java SE 9中了.

另一方面,在不提供替代方案的情况下弃用某些东西并不是一种好的做法.

发布说明指出:"建议现有应用程序迁移远离使用这些机制"

那么你怎么能"远离"

  • 认可标准覆盖机制
  • 扩展机制

在Java SE 8中?

java java-8 java-9

10
推荐指数
1
解决办法
5235
查看次数

处理没有API网关的https请求

使用AWS lambda但不使用API Gateway或处理http(s)请求的方法有哪些Amazon Kinesis?有可能吗?

特别是我想实现我自己的REST API但不支付API Gateway服务费用AWS lambda.

我不是要求教程或库,这是关于Amazon services架构的原则.

这一切都与Java 8运行时有关.

java amazon-web-services aws-lambda

10
推荐指数
1
解决办法
2545
查看次数

Liquibase错误[Postgresql]:未终止的美元引用字符串在"$ BODY $"附近

Liquibase错误:未结合美元引用的字符串在"$ BODY $"或附近

Chaneg log xml有一个条目:见下面包括file ="/ home/dev /....../ admin_script.sql"

文件内容:

...............
CREATE OR REPLACE FUNCTION my_schema.function-name()
RETURNS smallint AS
$BODY$
   DECLARE
      v_next_gen_id smallint := 0;
   BEGIN
..........
Run Code Online (Sandbox Code Playgroud)

例外:

liquibase.exception.DatabaseException:执行SQL时出错CREATE OR REPLACE FUNCTION函数名称()ETURNS smallint AS $ BODY $ DECLARE v_next_gen_id smallint:= 0:错误:未终止的美元引用字符串处于或接近"$ BODY $

感谢您解决此问题的任何帮助

java liquibase

10
推荐指数
4
解决办法
3383
查看次数