小编rü-*_*rü-的帖子

获取Java lambda表达式的封闭类

我有一个采用功能参数的方法,例如a Runnable.由于它是一个库方法,我希望它使用从函数参数派生的记录器.调用getClass函数参数适用于普通类,我可以getEnclosingClass用于嵌套或匿名类; 但如果它是一个lambda表达式,它会返回一个含有的模糊名称$$Lambda$,我可以像这样手动剥离:

Class<?> type = runnable.getClass();
String canonical = type.getCanonicalName();
int lambdaOffset = canonical.indexOf("$$Lambda$");
if (lambdaOffset > 0) {
    try {
        type = Class.forName(canonical.substring(0, lambdaOffset));
    } catch (ClassNotFoundException e) {
        // strange, but we can stick to the type we already have
    }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,这不是很优雅,也可能不便携.我试过getEnclosingClass,getEnclosingMethodgetEnclosingConstructor,但他们都返回null.

有任何想法吗?

java lambda

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

JUnit 5测试带有标为`@ RegisterExtension`的字段在Kotlin中不起作用

JUnit 5编写了一个测试类,Java它使用一个标为的字段@RegisterExtension,它工作得很好:

class RegisterExtensionTest {

    @RegisterExtension
    LoggingExtension log = new LoggingExtension(RegisterExtensionTest.class);

    @Test void demoTest() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

当我将其转换为Kotlin时:

class RegisterExtensionTest {

     @RegisterExtension
     var log = LoggingExtension(RegisterExtensionTest::class.java)

     @Test
     fun demoTest() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

现在LoggingExtension不再运行了。为什么?

java kotlin junit5

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

如何使用 JSON-B 将 JSON 字符串反序列化为非公共类?

我创建了一个带有两个类的普通 Java 9 Maven 应用程序,以使用 JSON-B 测试 JSON 的序列化和反序列化。这是代码:

package com.jsonbdemos;
import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;
import javax.json.bind.JsonbConfig;

public class App {

    public static void main(String[] args) {
        Jsonb jsonb = JsonbBuilder.create(new JsonbConfig());
        String jsonData = "{\"creationDate\":\"2018-01-05\"}";

        // Create Widget object from JSON string.
        Widget widget = jsonb.fromJson(jsonData, Widget.class);
        System.out.println("JSON => object: " + widget.toString());

        // Serialize Widget object to JSON string.
        String jsonFromObject = jsonb.toJson(widget);
        System.out.println("object => JSON: " + jsonFromObject);
    }
}

package com.jsonbdemos;
import java.time.LocalDate;

public class Widget …
Run Code Online (Sandbox Code Playgroud)

java json json-deserialization jsonb-api

4
推荐指数
1
解决办法
2997
查看次数

为什么期间不可比较

为什么不java.time.Period实现java.lang.Comparable界面?

简单的问题,但答案可能不那么简单:其他常用的时间量java.time.Duration 确实实现Comparable,所以我假设设计师可能会考虑它,但决定反对它.

java comparison date

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

无法在wildfly-swarm上启动jax-rs服务

我有一个JAX-RS服务,可以在本地使用wildfly-swarm 1.0.0.Beta8,但是当我在远程机器上启动它时,我得到以下异常:

ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.undertow.listener.default: org.jboss.msc.service.StartException in service jboss.undertow.listener.default: Could not start http listener
    at org.wildfly.extension.undertow.ListenerService.start(ListenerService.java:142)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.SocketException: Protocol family unavailable
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:433)
    at sun.nio.ch.Net.bind(Net.java:425)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at org.xnio.nio.NioXnioWorker.createTcpConnectionServer(NioXnioWorker.java:190)
    at org.xnio.XnioWorker.createStreamConnectionServer(XnioWorker.java:243)
    at org.wildfly.extension.undertow.HttpListenerService.startListening(HttpListenerService.java:126)
    at org.wildfly.extension.undertow.ListenerService.start(ListenerService.java:138)
    ... 5 more
Run Code Online (Sandbox Code Playgroud)

此外,当我将应用程序部署到完整的野生动物10时,它的工作正常.

我用谷歌搜索"协议族不可用"例外可能与只有IPv6地址的机器有关,而java默认为IPv4,但这台机器确实有一个IPv4地址.

我不知道我可能做错了什么.

有什么建议?

wildfly wildfly-10 wildfly-swarm

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