Questions tagged «java»

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






22
在Java 8中,有没有一种简洁的方法可以迭代带有索引的流?
是否有一种简洁的方法可以在访问流中的索引的同时对流进行迭代? String[] names = {"Sam","Pamela", "Dave", "Pascal", "Erik"}; List<String> nameList; Stream<Integer> indices = intRange(1, names.length).boxed(); nameList = zip(indices, stream(names), SimpleEntry::new) .filter(e -> e.getValue().length() <= e.getKey()) .map(Entry::getValue) .collect(toList()); 与那里给出的LINQ示例相比,这似乎令人失望 string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" }; var nameList = names.Where((c, index) => c.Length <= index + 1).ToList(); 有没有更简洁的方法? …
382 java  java-8  java-stream 



6
Maven模块+构建单个特定模块
我有一个父项目多模块Maven项目P和三个子模块A,B和C。这两个B和C是战项目,都依赖于A。 我可以输入mvn compile在P和拥有所有的子模块正确的编译的。当我要对特定模块进行操作时,问题就来了。 我希望能够为项目打包战争B,但是当我从B的目录运行package命令时,它抱怨找不到的依赖项A。 我从这个问题中了解到:Maven和相关模块,也许Maven并不是真正为这种类型的依赖关系解析而设计的,但这引出了我应该如何打包的问题B? mvn package当我真的想要时,是否必须为整个项目层次结构运行B? 每次打包时都必须将A的快照安装到本地存储库中B吗? 当A仍在积极开发中时,第二种情况就不好玩了。 这里有最佳做法吗?

12
为什么要在Java的方法参数上使用关键字“ final”?
当在方法参数上使用final关键字时,我无法理解该关键字在哪里真正方便。 如果我们排除使用匿名类,可读性和意图声明,那么对我来说几乎毫无用处。 强制某些数据保持不变并不像看起来那样强大。 如果参数是原始参数,则它将无效,因为参数作为值传递给方法,并且在范围之外进行更改将无效。 如果我们通过引用传递参数,则引用本身就是局部变量,并且如果在方法内部更改了引用,则不会在方法范围之外产生任何影响。 考虑下面的简单测试示例。尽管该方法更改了给定给定值的参考值,但该测试通过了,但没有效果。 public void testNullify() { Collection<Integer> c = new ArrayList<Integer>(); nullify(c); assertNotNull(c); final Collection<Integer> c1 = c; assertTrue(c1.equals(c)); change(c); assertTrue(c1.equals(c)); } private void change(Collection<Integer> c) { c = new ArrayList<Integer>(); } public void nullify(Collection<?> t) { t = null; }

7
方法具有与另一种方法相同的擦除
为什么在同一类中使用以下两种方法是不合法的? class Test{ void add(Set<Integer> ii){} void add(Set<String> ss){} } 我得到了 compilation error 方法add(Set)与类型Test中的另一个方法具有相同的擦除add(Set)。 虽然我可以解决它,但我想知道为什么javac不喜欢这样。 我可以看到,在很多情况下,这两种方法的逻辑非常相似,可以用一个方法代替 public void add(Set<?> set){} 方法,但并非总是如此。 如果您想让两个带有constructors这些参数,这会特别令人讨厌,因为那样您就不能只更改其中一个的名称constructors。
381 java  generics 

22
避免在Java中同步(this)?
每当关于Java同步的问题浮出水面时,有些人就会很想指出synchronized(this)应该避免的事情。他们声称,取而代之的是,最好是锁定私有引用。 给出的一些原因是: 一些邪恶的代码可能会窃取您的锁(非常流行,也有一个“偶然的”变体) 同一类中的所有同步方法都使用完全相同的锁,这会降低吞吐量 您(不必要地)暴露了太多信息 包括我在内的其他人则认为,这synchronized(this)是一个惯用语言(在Java库中也是如此),是安全且易于理解的。应当避免这种情况,因为您有一个错误,而且对多线程程序中正在发生的事情一无所知。换句话说:如果适用,请使用它。 我对看到一些真实的示例(没有foobar的东西)感兴趣,在这种情况下,避免锁定this也更可取synchronized(this)。 因此:您是否应该始终避免synchronized(this)使用私有引用锁定并将其替换? 一些进一步的信息(根据给出的答案进行更新): 我们正在谈论实例同步 的隐式(synchronized方法)和显式形式synchronized(this)都被考虑 如果您引用Bloch或有关该主题的其他权威,请不要遗漏您不喜欢的部分(例如,Effective Java,Thread Safety上的项目:通常是实例本身的锁,但也有例外)。 如果您需要锁定而不是synchronized(this)提供粒度,synchronized(this)则不适用,所以这不是问题

25
如何使用ExecutorService等待所有线程完成?
我需要一次执行一些任务4,如下所示: ExecutorService taskExecutor = Executors.newFixedThreadPool(4); while(...) { taskExecutor.execute(new MyTask()); } //...wait for completion somehow 完成所有步骤后如何通知我?现在,我想不出什么比设置一些全局任务计数器并在每个任务结束时减少它,然后无限循环监视此计数器为0更好的了。或获取期货的列表,并在无限循环中对所有期货进行isDone监视。什么是不涉及无限循环的更好的解决方案? 谢谢。

8
这个日期格式是什么?2011-08-12T20:17:46.384Z
我有以下日期: 2011-08-12T20:17:46.384Z。这是什么格式?我正在尝试通过Java 1.4解析它,DateFormat.getDateInstance().parse(dateStr)并且 java.text.ParseException:无法解析的日期:“ 2011-08-12T20:17:46.384Z” 我认为我应该使用SimpleDateFormat进行解析,但是我必须首先知道格式字符串。到目前为止yyyy-MM-dd,我所拥有的只是,因为我不知道T该字符串的含义是什么-与时区有关?此日期字符串来自“ 文件CMIS下载历史记录”媒体类型lcmis:downloadedOn上显示的标签。

11
@Resource vs @Autowired
我应该在DI中使用哪个注释@Resource(jsr250)或@Autowired(特定于Spring)? 我已经成功地在过去使用两种,@Resource(name="blah")和@Autowired @Qualifier("blah") 我的直觉是坚持使用该@Resource标签,因为它已被jsr人士批准。 有人对此有强烈的想法吗?

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.