我们有一个混合的Android应用程序.我试图从一个来回导航WebView到一个Native上下文.使用chrome://inspect/#devices我注意到检查的设备有多个实例,detached而其中一个实例attached将以chrome显示.参考SO-28254614,现在我还没有开发WebView,但是根据我对应用程序的了解,WebView不是使用Cordova设计的,而是JS中的.我的问题是:
由于新的模块系统,Java 9(jdk-9 + 170)默认情况下不允许应用程序查看JDK中的所有类,这与以前的所有Java版本不同.
要解决此问题,java命令行会提供一个新参数--add-exports,允许按如下方式中断封装:
java -jar josm.jar --add-exports java.base/sun.security.util=ALL-UNNAMED --add-exports java.base/sun.security.x509=ALL-UNNAMED
这在JEP 261中得到了很好的解释.
我已经阅读了--add-opens使用相同语法的类似选项,但是JEP 261尚未更新来描述它(最后更新:2017/03/08 13:58).
这两个选项有什么区别?
编辑:JEP 261已在2017-09-22更新以解释它.
java command-line-arguments java-platform-module-system java-9 java-module
使用Java 11,我可以初始化InputStream为:
InputStream inputStream = InputStream.nullInputStream();
Run Code Online (Sandbox Code Playgroud)
但我无法理解
ie 的潜在用例InputStream.nullInputStream或类似的API .OutputStreamOutputStream.nullOutputStream
从API Javadocs,我可以弄清楚它
返回一个新的
InputStream即读取任何字节.返回的流最初是打开的.通过调用close()方法关闭流.后续调用
close()无效.虽然流是开放的,available(),read(),read(byte[]),...skip(long),和transferTo()方法的行为都好像流的末尾已到达.
我进一步详细说明了这些说明:
有很多次我想使用需要作为目标OutputStream/Writer的参数来发送输出的方法,但是想要为其他效果静默执行这些方法.
这相当于Unix将命令输出重定向到/ dev/null,或者在DOS中将命令输出附加到NUL的能力.
然而,我无法理解陈述中声明的那些方法是什么...... 为了其他效果而默默地执行这些方法.(归咎于我没有动手使用API)
有人可以帮助我理解在可能的情况下借助示例获得这样的输入或输出流有什么用处吗?
编辑:我在进一步浏览时可以找到的类似实现之一是apache-commons'NullInputStream,它更好地证明了测试用例的合理性.
是否可以使用Maven资源保留文件的权限:testResources?我的用例是一个Selenium二进制驱动程序,我放在/ src/test/resources中,我希望能够在我的测试中使用它.然而,我的-rwxr-xr-x在目标/测试类中变为-rw-r - r--
我们将Java版本从8升级到11但是我得到了getter/setter方法的编译错误,其中我使用Lombok的Getter和Setter Annotations实现了POJO类.
有没有办法使用Lombok的@Data注释,它提供getter和setter而不在Java 11中实现它们?
目前,我面临的错误是:
找不到getStoreName()
where storeName在类上面声明为全局变量,在类上面有@Data Lombok注释.
我正在学习Java 8,我遇到了一些我觉得有点奇怪的东西.
请考虑以下代码段:
private MyDaoClass myDao;
public void storeRelationships(Set<Relationship<ClassA, ClassB>> relationships) {
RelationshipTransformer transformer = new RelationshipTransformerImpl();
myDao.createRelationships(
relationships.stream()
.map((input) -> transformer.transformRelationship(input))
.collect(Collectors.toSet())
);
}
Run Code Online (Sandbox Code Playgroud)
基本上,我需要将调用的输入集映射relationships到不同的类型,以符合我正在使用的DAO的API.对于转换,我想使用RelationshipTransformerImpl我实例化为局部变量的现有类.
现在,这是我的问题:
如果我要修改上面的代码如下:
public void storeRelationships(Set<Relationship<ClassA, ClassB>> relationships) {
RelationshipTransformer transformer = new RelationshipTransformerImpl();
myDao.createRelationships(
relationships.stream()
.map((input) -> transformer.transformRelationship(input))
.collect(Collectors.toSet())
);
transformer = null; //setting the value of an effectively final variable
}
Run Code Online (Sandbox Code Playgroud)
我显然会得到一个编译错误,因为局部变量transformer不再是"有效的最终".但是,如果用方法引用替换lambda:
public void storeRelationships(Set<Relationship<ClassA, ClassB>> relationships) {
RelationshipTransformer transformer = new RelationshipTransformerImpl();
myDao.createRelationships(
relationships.stream()
.map(transformer::transformRelationship)
.collect(Collectors.toSet()) …Run Code Online (Sandbox Code Playgroud) 假设我有一个带groupId = org.abc和的库artifactId = myLibrary.模块名称的推荐名称是什么:myLibrary或org.abc.myLibrary?是否有任何命名方案的官方指南?
我正在研究Immutable收藏的工厂方法.我看到该Set.of()方法有10个varargs重载(相同Map.of()).我真的不明白为什么会这么多.最后,ImmutableCollections.SetN<>(elements)无论如何都会调用该函数.
在文档中我发现了这个:
虽然这会在API中引入一些混乱,但它避免了varargs调用引起的数组分配,初始化和垃圾收集开销.
杂乱的确是值得的性能提升吗?如果是,理想情况下是否会为任何N元素创建单独的方法?
最近我从官方网站安装了JDK 9和Apache Cassandra.但是现在当我在前台启动cassandra时,我得到了这样的信息:
apache-cassandra-3.11.1/bin$ ./cassandra -f
[0.000s][warning][gc] -Xloggc is deprecated. Will use -Xlog:gc:/home/mmatak/monero/apache-cassandra-3.11.1/logs/gc.log instead.
intx ThreadPriorityPolicy=42 is outside the allowed range [ 0 ... 1 ]
Improperly specified VM option 'ThreadPriorityPolicy=42'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Run Code Online (Sandbox Code Playgroud)
到目前为止,我没有找到任何解决方案.Java 9和Cassandra可能还不兼容吗?这也是提到的问题 - #CASSANDRA-13107
但我不知道如何"删除旗帜"?在哪里可以覆盖或删除此标志?
有简单的解决方案可以连接两个String[]或Integer[]在java中Streams.因为int[]经常使用.连接两个有什么简单的方法int[]吗?
这是我的想法:
int[] c = {1, 34};
int[] d = {3, 1, 5};
Integer[] cc = IntStream.of(c).boxed().toArray(Integer[]::new);
Integer[] dd = Arrays.stream(d).boxed().toArray(Integer[]::new);
int[] m = Stream.concat(Stream.of(cc), Stream.of(dd)).mapToInt(Integer::intValue).toArray();
System.out.println(Arrays.toString(m));
>>
[1, 34, 3, 1, 5]
Run Code Online (Sandbox Code Playgroud)
它可以工作,但它实际上转换int[]为Integer[],然后再转换Integer[]回来int[].
java ×7
java-9 ×4
java-11 ×2
java-8 ×2
java-module ×2
lambda ×2
arrays ×1
cassandra ×1
collections ×1
inputstream ×1
java-platform-module-system ×1
java-stream ×1
javascript ×1
jvm ×1
lombok ×1
maven ×1
outputstream ×1