我试图编写一个方法,通过将一个字符串数组作为参数传递给该方法,从另一个类执行静态方法.
这就是我所拥有的:
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) 是否可以在JVM内存之外创建一个持久性内存对象,可以在JVM中作为对象使用,以便它能够在JVM重启后幸存下来?
特别的想法是我们可以在JVM之外分配内存,然后使用JNI接口来访问这个内存,并将一些Java数组与它相关联.
有人试图进行这样的黑客攻击吗?任何平台依赖都足够了.
例如,这有助于在重新启动JVM进程期间执行内存数据库加载的优化.
什么是影响消息转换器优先级的最方便的方法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
您可以设置Accept和Content-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.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(...)呢?什么原因?
拿代码:
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
考虑以下简单的代码示例:
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 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中?
使用AWS lambda但不使用API Gateway或处理http(s)请求的方法有哪些Amazon Kinesis?有可能吗?
特别是我想实现我自己的REST API但不支付API Gateway服务费用AWS lambda.
我不是要求教程或库,这是关于Amazon services架构的原则.
这一切都与Java 8运行时有关.
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 ×10
java-9 ×3
aws-lambda ×1
http ×1
importerror ×1
java-8 ×1
jvm ×1
liquibase ×1
memory ×1
reflection ×1
resttemplate ×1
soap ×1
spring ×1