好的,这个"系列"中的第一个问题就是这个问题.
现在,这是另一个案例:
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 Consumer
是forEach()
期望的.
所以我试过这个......
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
?
我是格拉巴酒的维护者.此包通过使用ASM生成一个扩展解析器类的类,从Java代码在运行时生成解析器.
我已经从ASM 4迁移到ASM 5,从生成JVM 1.5字节码到生成JVM 1.6字节码,现在我已经成功生成了JVM 1.7字节码而不是......除了我不知道为什么这样做.
基本上,我做了以下事情:
new ClassWriter(ClassWriter.COMPUTE_MAXS)
现在是new ClassWriter(ClassWriter.COMPUTE_FRAMES)
.visit()
方法的第一个参数更改Opcodes.V1_6
为Opcodes.V1_7
.现在,为什么我不明白为什么它有效有两个原因:
我有几个电话给MethodVisitor
s:
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)
鉴于它是一个实例字段,我想它与在构造函数中初始化的特定参数有关吗?
无论如何,我所有的测试现在都有效,我正在尝试更重的测试......但是我的目标是更进一步,我想至少了解为什么我的修改工作了... .
(初步说明:也许这更适合代码审查?)
编辑 回答自己 ; 我相信这个答案涵盖了我的所有需求/问题,当然,欢迎提出意见.原始问题留待下面参考.
你好,
这里感兴趣的是.getSources()
方法.此方法旨在返回给定的消息源列表Locale
.
此方法的两个中央数据结构是sources
和failedLookups
,请参阅注释代码.
这个特定的实现.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) 首先,我不能做任何事情,只能参考我认为最有名的SO帖子:
现在,它甚至是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语法......但这是"出于我的勇气".因为我觉得它可能更容易......但这并不能证明这对正则表达式来说是不可行的.
适用于Javadoc URL
的.toURI()
方法中提到,它可以抛出一个URISyntaxException
如果:
[...]此URL未严格按照RFC2396格式化,无法转换为URI.
但是,到目前为止,我没有成功尝试触发此异常.更重要的是,URL
无论如何你需要"传递" 构造函数测试.
那么,是否存在一个有效的例子URL
是不是有效URI
?
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) 这是杰克逊2.2.x.
我有一个班级实施JsonSerializable
; 有两种方法可以实现这个接口,serialize()
和serializeWithType()
.
我想测试这个类的{de,}序列化,我可以serialize()
轻松触发调用; 但是,不是serializeWithType()
.
[...]预计其他类型信息将包含在序列化中,以便进行反序列化.
我只是不明白这意味着什么......
如何设置测试环境以便调用此方法?请注意,要序列化的JSON可以是除object之外的任何类型(即boolean,number,string,array都是有效类型).
您可以使用以下方法获取Properties
JVM属性的实例System.getProperties()
; 您将如何使用Java 8代码将所有属性打印到控制台?
[Composer\Json\JsonValidationException]
“./composer.json”与预期的 JSON 模式不匹配:
- 属性名称是必需的
- 属性描述是必需的
我尝试通过谷歌进行梳理,尝试重新安装作曲家,我不知道如何修复这个错误。
最新的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)