Questions tagged «java»

Java是一种流行的高级编程语言。如果您在使用或理解语言本身时遇到问题,请使用此标签。这个标签很少单独使用,最常与[spring],[spring-boot],[jakarta-ee],[android],[javafx],[gradle]和[maven]结合使用。

9
从List <Future>到Future <List>序列
我正在尝试转换List&lt;CompletableFuture&lt;X&gt;&gt;为CompletableFuture&lt;List&lt;T&gt;&gt;。当您有许多异步任务并且需要获得所有异步任务的结果时,这非常有用。 如果它们中的任何一个失败,那么最终的未来将失败。这就是我实现的方式: public static &lt;T&gt; CompletableFuture&lt;List&lt;T&gt;&gt; sequence2(List&lt;CompletableFuture&lt;T&gt;&gt; com, ExecutorService exec) { if(com.isEmpty()){ throw new IllegalArgumentException(); } Stream&lt;? extends CompletableFuture&lt;T&gt;&gt; stream = com.stream(); CompletableFuture&lt;List&lt;T&gt;&gt; init = CompletableFuture.completedFuture(new ArrayList&lt;T&gt;()); return stream.reduce(init, (ls, fut) -&gt; ls.thenComposeAsync(x -&gt; fut.thenApplyAsync(y -&gt; { x.add(y); return x; },exec),exec), (a, b) -&gt; a.thenCombineAsync(b,(ls1,ls2)-&gt; { ls1.addAll(ls2); return ls1; },exec)); …

5
在Java和默认的信任库中使用自定义信任库
我正在用Java编写一个应用程序,该应用程序通过HTTPS连接到两个Web服务器。一个通过默认的信任链获得了受信任的证书,另一个使用自签名证书。当然,连接到第一个服务器是开箱即用的,而使用自签名证书连接到服务器则无法工作,直到我使用该服务器上的证书创建了一个trustStore。但是,与默认受信任服务器的连接不再起作用,因为显然,一旦创建了自己的信任库,默认的trustStore就会被忽略。 我发现的一种解决方案是将默认trustStore中的证书添加到我自己的证书中。但是,我不喜欢这种解决方案,因为它要求我继续管理该trustStore。(我不能假设这些证书在可预见的将来保持不变,对吗?) 除此之外,我发现了两个存在5年的类似问题的线程: 在JVM中注册多个密钥库 如何为Java服务器拥有多个SSL证书 他们俩都深入Java SSL基础架构。我希望到目前为止,有一个更方便的解决方案,可以在我的代码的安全性检查中轻松解释。

3
带有参数的Android Room @Delete
我知道我不能DELETE在查询中使用(顺便说一句很遗憾),我会收到以下错误: &lt;i&gt;Error:error: Observable query return type (LiveData, Flowable etc) can only be used with SELECT queries that directly or indirectly (via @Relation, for example) access at least one table.&lt;/i&gt; 但是我不能使用@Delete(WHERE... xxx) 那么,如何通过参数删除特定行?

3
@Override是什么意思?
public class NaiveAlien extends Alien { @Override public void harvest(){} } 我试图理解我朋友的代码,但是代码中没有语法@Override。这有什么作用,为什么我们需要编码?谢谢。

4
如何从Lucene TokenStream获取令牌?
我正在尝试使用Apache Lucene进行令牌化,但我对从中获取令牌的过程感到困惑TokenStream。 最糟糕的部分是我正在查看JavaDocs中解决我的问题的注释。 http://lucene.apache.org/java/3_0_1/api/core/org/apache/lucene/analysis/TokenStream.html#incrementToken%28%29 不知何故,AttributeSource应该使用an而不是Tokens。我完全不知所措。 谁能解释如何从TokenStream获得类似令牌的信息?

3
为什么此语句不引发StackOverflowError?
我刚刚在另一个问题中看到了这段奇怪的代码。我以为会导致StackOverflowError被抛出,但事实并非如此…… public class Node { private Object one; private Object two; public static Node NIL = new Node(Node.NIL, Node.NIL); public Node(Object one, Object two) { this.one = one; this.two = two; } } 我以为它会爆炸,因为要进行Node.NIL引用本身。 我不知道为什么不这样做。

5
为什么“ while(i ++ <n){}”比“ while(++ i <n){}”显着慢
显然,在装有HotSpot JDK 1.7.0_45(并将所有编译器/ VM选项设置为默认值)的Windows 8笔记本电脑上,以下循环 final int n = Integer.MAX_VALUE; int i = 0; while (++i &lt; n) { } 比以下速度至少快两个数量级(〜10 ms与〜5000 ms): final int n = Integer.MAX_VALUE; int i = 0; while (i++ &lt; n) { } 我在编写循环以评估另一个不相关的性能问题时碰巧注意到了这个问题。之间的差异++i &lt; n和i++ &lt; n是巨大的,足以显著影响结果。 如果我们查看字节码,则较快版本的循环主体为: iinc iload ldc if_icmplt 对于较慢的版本: iload …

2
如何使用一个log4j配置文件创建2个单独的日志文件?
我不知道如何配置我的log4j,以便我的debugLog和我的reportLog彼此分开(不是附加的)。为什么在以下配置中,reportsLog始终为空? log4j.rootLogger=TRACE, stdout, debugLog log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n log4j.appender.debugLog=org.apache.log4j.FileAppender log4j.appender.debugLog.File=logs/debug.log log4j.appender.debugLog.layout=org.apache.log4j.PatternLayout log4j.appender.debugLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n log4j.reportsLog=DEBUG,reportsLog log4j.appender.reportsLog=org.apache.log4j.FileAppender log4j.appender.reportsLog.File=logs/reports.log log4j.appender.reportsLog.layout=org.apache.log4j.PatternLayout log4j.appender.reportsLog.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n 这是我的Java代码: package test; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class HelloLogger { static final Logger debugLog = Logger.getLogger("debugLog"); static final Logger resultLog = Logger.getLogger("reportsLog"); public static …
74 java  logging  log4j 


3
为什么JDK源代码要获取volatile实例的最终副本
我阅读了有关ConcurrentHashMap的JDK源代码。 但是以下代码使我感到困惑: public boolean isEmpty() { final Segment&lt;K,V&gt;[] segments = this.segments; ... } 我的问题是: 声明“ this.segments”: final Segment&lt;K,V&gt;[] segments; 因此,这里在方法的开头,声明了相同的类型引用,指向了相同的内存。 作者为什么要这样写?他们为什么不直接使用this.segments?有什么原因吗?
74 java 


5
eclipse编译器或javac中的错误(“无法确定T的类型参数”)
以下代码 public class GenericsTest2 { public static void main(String[] args) throws Exception { Integer i = readObject(args[0]); System.out.println(i); } public static &lt;T&gt; T readObject(String file) throws Exception { return readObject(new ObjectInputStream(new FileInputStream(file))); // closing the stream in finally removed to get a small example } @SuppressWarnings("unchecked") public static &lt;T&gt; T …
74 java  eclipse  generics 

2
id = 1-id是原子吗?
在OCP Java SE 6程序员实践考试的第291页中,问题25: public class Stone implements Runnable { static int id = 1; public void run() { id = 1 - id; if (id == 0) pick(); else release(); } private static synchronized void pick() { System.out.print("P "); System.out.print("Q "); } private synchronized void release() { System.out.print("R "); …

9
我的Android应用程序正在消耗电池吗?
我正在为Android开发游戏。它使用表面视图,并使用提供的各种标准2D绘图API。当我第一次发布游戏时,我正在做各种各样的愚蠢的事情,例如在每个帧上重新绘制9个补丁,并同样使用文本。从那以后,我已经通过绘制到位图对象并在每一帧绘制它们来优化了大部分内容,仅在需要时才重新绘制到位图对象上。 之前和之后,我都收到过有关电池电量耗尽的投诉,我想(科学地)知道我是否进行了任何改进。不幸的是,我没有任何先验数据,因此将性能与某些其他游戏进行比较将非常有用。 我一直在运行Traceview,并将其结果主要用于识别耗时的方法。 那么-确定应用程序电池性能的最佳方法是什么,什么是好的基准? 我知道我可以通过设置查看不同应用程序的%s,但这又不科学,因为我从中获得的数据还取决于所有其他应用程序中发生的事情。我已经阅读了Google的大部分文档,尽管很明显,您应该节省电池电量(偶尔会提示如何使用),但是几乎没有迹象表明我可以衡量我的应用程序的性能如何表演。我要说的最后一件事是更多关于Android电子市场电池耗电的投诉! 提前致谢。 编辑 感谢您提供的所有有益的建议/建议。我真正想知道的是如何使用来自Traceview的数据(即:游戏每一帧花费的CPU时间(以毫秒为单位))来确定电池使用情况(如果可能的话)。回顾我原来的问题,我可以看出我有点含糊。再次感谢。

1
如果GetStringUTFChars返回了副本,您应该调用ReleaseStringUTFChars吗?
Rob Gordon撰写的《 Essential JNI:Java本机接口》一书包含以下代码示例,可将jstring转换为C字符串: const char* utf_string; jboolean isCopy; utf_string = env-&gt;GetStringUTFChars(str, &amp;isCopy); /* ... use string ... */ if (isCopy == JNI_TRUE) { env-&gt;ReleaseStringUTFChars(str, utf_string); } 请注意,它仅ReleaseStringUTFChars在isCopy为true时调用。 但是《Java本机接口:程序员指南和规范》一书(替代链接http://192.9.162.55/docs/books/jni/html/objtypes.html#5161:)说: 无论GetStringChars已将* isCopy设置为JNI_TRUE还是JNI_FALSE,都必须使用ReleaseString-Chars调用。ReleaseStringChars释放副本或取消固定实例,具体取决于GetStringChars是否返回了副本。 我以为这是戈登书中的错误是正确的吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.