小编fge*_*fge的帖子

Java 8流,为什么要编译第2部分......或者什么是方法参考,真的吗?

好的,这个"系列"中的第一个问题就是这个问题.

现在,这是另一个案例:

Arrays.asList("hello", "world").stream().forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

这编译,并工作......

好的,在上一个问题中,使用了中的静态方法.

但现在这是不同的:System.out是一个static领域System,是的; 它也是一个PrintStream,并且PrintStream有一个println()恰好匹配a的签名的方法Consumer,并且a ConsumerforEach()期望的.

所以我试过这个......

public final class Main
{
    public static void main(final String... args)
    {
        Arrays.asList(23, 2389, 19).stream().forEach(new Main()::meh);
    }

    // Matches the signature of a Consumer<? super Integer>...
    public void meh(final Integer ignored)
    {
        System.out.println("meh");
    }
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理!

这是一个完全不同的范围,因为我启动了一个新实例,并且可以在构造此实例后立即使用方法引用!

那么,一个方法参考真的是任何服从签名的方法吗?有什么限制?有没有人可以建立一个"@FunctionalInterface兼容"的方法,不能用于@FunctionalInterface

java java-8 functional-interface

9
推荐指数
1
解决办法
489
查看次数

ASM 5:初始化ClassWriter时,COMPUTE_MAXS和COMPUTE_FRAMES之间有什么区别?

我是格拉巴酒的维护者.此包通过使用ASM生成一个扩展解析器类的类,从Java代码在运行时生成解析器.

我已经从ASM 4迁移到ASM 5,从生成JVM 1.5字节码到生成JVM 1.6字节码,现在我已经成功生成了JVM 1.7字节码而不是......除了我不知道为什么这样做.

基本上,我做了以下事情:

  • 将参数更改为ClassWriter构造函数; 在它之前,它new ClassWriter(ClassWriter.COMPUTE_MAXS)现在是new ClassWriter(ClassWriter.COMPUTE_FRAMES)
  • 将每个调用.visit()方法的第一个参数更改Opcodes.V1_6Opcodes.V1_7.

现在,为什么我不明白为什么它有效有两个原因:

  • 我有几个电话给MethodVisitors:

    mv.visitMaxs(0, 0); // trigger automatic computing
    
    Run Code Online (Sandbox Code Playgroud)

    这是否意味着可以删除这些说明?

  • 起初我只是尝试和添加COMPUTE_FRAMES参数的ClassWriter构造函数,但它没有在一个点为我的测试中,我宣布一个:

    static class TestJoinParser
        extends EventBusParser<Object>
    {
        protected final JoinMatcherBuilder builder
            = join('a').using('b');
    }
    
    Run Code Online (Sandbox Code Playgroud)

    错误是:

    java.lang.ClassFormatError: Arguments can't fit into locals
    
    Run Code Online (Sandbox Code Playgroud)

    鉴于它是一个实例字段,我想它与在构造函数中初始化的特定参数有关吗?

无论如何,我所有的测试现在都有效,我正在尝试更重的测试......但是我的目标是更进一步,我想至少了解为什么我的修改工作了... .

java jvm bytecode-manipulation java-bytecode-asm

9
推荐指数
1
解决办法
2289
查看次数

仅使用JDK(6)提供类来改进代码的方法?(并发,线程安全)

(初步说明:也许这更适合代码审查?)

编辑 回答自己 ; 我相信这个答案涵盖了我的所有需求/问题,当然,欢迎提出意见.原始问题留待下面参考.

你好,

这里感兴趣的是.getSources()方法.此方法旨在返回给定的消息源列表Locale.

此方法的两个中央数据结构是sourcesfailedLookups,请参阅注释代码.

这个特定的实现.getSources()只能返回一个空列表或单个元素列表,具体取决于tryAndLookup()原型的方法:

protected abstract MessageSource tryAndLookup(final Locale locale)
    throws IOException;
Run Code Online (Sandbox Code Playgroud)

现在,代码的逻辑如下:

  • 如果已成功查找该语言环境的消息源,则返回该消息来源;
  • 从这一点开始,没有进行任何查找; 但是,这是否意味着这是否意味着先前的查找尝试已经完成:检查失败的查找集,如果要查找的语言环境在那里,则是已知失败,返回空列表;
  • 现在,已知的情况是这个区域设置查找实际上从未执行过:执行它; 根据tryAndLookup方法的结果,记录成功或失败.

现在,为什么我会这么做:我无法控制tryAndLookup(); 在返回有效来源或失败之前,可能需要花费过多的时间才能执行.结果,我不愿意使用粗锁或synchronized块.

/**
 * Set of locales known to have failed lookup.
 *
 * <p>When a locale is in this set, it will not attempt to be reloaded.</p>
 */
private final Set<Locale> lookupFailures
    = new CopyOnWriteArraySet<Locale>();

/** …
Run Code Online (Sandbox Code Playgroud)

java concurrency caching

8
推荐指数
1
解决办法
255
查看次数

正则表达式和HTML不混合的根本原因是什么?它背后的理论?

首先,我不能做任何事情,只能参考我认为最有名的SO帖子:

除了XHTML自包含标记之外,RegEx匹配开放标记

现在,它甚至是StackOverflow的问题吗?我不知道,但我会试试......

我会从个人的角度讲.虽然我从来没有这样做,但我知道在我必须解析HTML的那一天,我肯定不会使用正则表达式; 我将尝试找到一个HTML解析库.精细.

但我不知道为什么.

有一次,我决定用Java进行CSS验证.我知道"通过胆量",正则表达式不会削减它,所以我使用了Parboiled.

我不知道为什么.

"为什么"让我烦恼.我根本不是正念法的新手.我只是不能在正则表达式引擎之间划清界限,也不能做.

我的问题如下:这条线是什么?必须存在输入的基本特征,以便在数学上证明任何正则表达式引擎都无法可靠地确定成功和失败?

你能给出一个简单的理论输入,这个输入会使正则表达式引擎能够提供可靠的"匹配/不匹配"答案吗?如果是,这种输入的定义特征是什么?

编辑为了这个讨论,我将添加一个帖子在SO上建议的任务(我现在找不到链接,抱歉)这比HTML简单,但我不会使用正则表达式:shell命令行解析.

就shell而言,这些是等价的:

alias ll="ls -l"
alias ll=ls\ -l
alias l"l"=ls' -'l
"alia"s l"l= "ls\ -l
Run Code Online (Sandbox Code Playgroud)

Shell引用机制如此众多,以至于我只会在这种情况下创建一个Parboiled语法......但这是"出于我的勇气".因为我觉得它可能更容易......但这并不能证明这对正则表达式来说是不可行的.

html regex parsing pattern-matching

8
推荐指数
1
解决办法
228
查看次数

无法转换的URL的示例.toURI()?

适用于Javadoc URL.toURI()方法中提到,它可以抛出一个URISyntaxException如果:

[...]此URL未严格按照RFC2396格式化,无法转换为URI.

但是,到目前为止,我没有成功尝试触发此异常.更重要的是,URL无论如何你需要"传递" 构造函数测试.

那么,是否存在一个有效的例子URL是不是有效URI

java url uri

8
推荐指数
1
解决办法
294
查看次数

如何指定JMH微基准测试以在不使用资源文件的情况下运行?

jmh 0.6.我有jmh-core,jmh-generator-annprocess,jmh-generator-reflection作为依赖项.

首先,不幸的是,文档很差.首先,我使用gradle而不是maven,因此使用maven原型不是一种选择.

其次,我想使用Java API,而不是命令行.

我非常简单的代码是:

public final class TestBenchmark
{
    private static final int COUNT = 100_000;
    private static final List<Integer> LIST = new ArrayList<>();

    static {
        for (int i = 0; i < COUNT; i++)
            LIST.add(i);
    }

    @GenerateMicroBenchmark
    public void foreachLoop()
    {
        int dummy;
        for (final int i: LIST)
            dummy = i;
    }

    @GenerateMicroBenchmark
    public void forLoop()
    {
        int dummy;
        final int size = LIST.size();
        for (int i = 0; i < size; i++)
            dummy = LIST.get(i);
    } …
Run Code Online (Sandbox Code Playgroud)

java jmh

8
推荐指数
1
解决办法
4772
查看次数

如何触发对Jackson中实现JsonSerializable的类的.serializeWithType()的调用?

这是杰克逊2.2.x.

我有一个班级实施JsonSerializable; 有两种方法可以实现这个接口,serialize()serializeWithType().

我想测试这个类的{de,}序列化,我可以serialize()轻松触发调用; 但是,不是serializeWithType().

后一种方法javadoc表示调用此方法

[...]预计其他类型信息将包含在序列化中,以便进行反序列化.

我只是不明白这意味着什么......

如何设置测试环境以便调用此方法?请注意,要序列化的JSON可以是除object之外的任何类型(即boolean,number,string,array都是有效类型).

java serialization jackson json-deserialization

8
推荐指数
1
解决办法
2946
查看次数

如何使用Java 8和lambdas打印JVM的系统属性?

您可以使用以下方法获取PropertiesJVM属性的实例System.getProperties(); 您将如何使用Java 8代码将所有属性打印到控制台?

java lambda java-8

8
推荐指数
2
解决办法
4276
查看次数

我怎样才能修复这个composer.json错误

JSON错误

[Composer\Json\JsonValidationException]
“./composer.json”与预期的 JSON 模式不匹配:
- 属性名称是必需的
- 属性描述是必需的

我尝试通过谷歌进行梳理,尝试重新安装作曲家,我不知道如何修复这个错误。

json laravel composer-php

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

Oracle JDK zip文件系统中的错误,你如何编写SSCCE来重现它?

最新的1.7和1.8版本的JDK(7u72,8u25)中存在此错误.要求:jackson-databind 2.5.0.在Linux x86_64上测试(准确地说是Ubuntu 14.10).

码:

public static void main(final String... args)
    throws IOException
{
    final Map<String, String> map
        = Collections.singletonMap("create", "true");
    final Path zipfile = Paths.get("/tmp/foo.zip");
    Files.deleteIfExists(zipfile);
    final URI uri = URI.create("jar:" + zipfile.toUri());
    final ObjectMapper mapper = new ObjectMapper();

    try (
        final FileSystem zipfs = FileSystems.newFileSystem(uri, map);
        final OutputStream out
            = Files.newOutputStream(zipfs.getPath("/t.json"));
    ) {
        mapper.writeValue(out, "hello");
    }
}
Run Code Online (Sandbox Code Playgroud)

这会产生无效的zip文件:

$ unzip /tmp/foo.zip 
Archive:  /tmp/foo.zip
replace t.json? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
  inflating: t.json                  
  error:  invalid compressed data to …
Run Code Online (Sandbox Code Playgroud)

java jackson java.nio.file

8
推荐指数
1
解决办法
309
查看次数