小编Kat*_*Kat的帖子

无法让Maven识别Java 1.8

我似乎无法让Maven使用Java 1.8.使用1.8作为目标会出现以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
(default-compile) on project csaro: Fatal error compiling: invalid target
release: 1.8 -> [Help 1]
Run Code Online (Sandbox Code Playgroud)

错误的原因很明显:Maven没有使用正确版本的Java:

$ mvn -version
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T07:51:42-06:00)
Maven home: /usr/local/Cellar/maven/3.2.2/libexec
Java version: 1.7.0_51, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.9.2", arch: "x86_64", family: "mac"
Run Code Online (Sandbox Code Playgroud)

但是安装的Java版本应该是1.8:

$ java -version
java version "1.8.0_20-ea"
Java(TM) SE Runtime Environment (build 1.8.0_20-ea-b22)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b21, …
Run Code Online (Sandbox Code Playgroud)

java maven

71
推荐指数
5
解决办法
10万
查看次数

JVM GC是否可以在参考比较过程中移动对象,即使双方都引用同一个对象,也会导致比较失败?

众所周知,GC有时会在内存中移动对象.而且我的理解是,只要在移动对象时(在调用任何用户代码之前)更新所有引用,这应该是非常安全的.

但是,我看到有人提到参考比较可能是不安全的,因为GC在参考比较的中间移动了对象,这样即使两个引用都应该引用同一个对象,比较也可能失败?

即,是否存在以下代码不能打印"真实"的情况?

Foo foo = new Foo();
Foo bar = foo;
if(foo == bar) {
    System.out.println("true");
}
Run Code Online (Sandbox Code Playgroud)

我试着谷歌搜索这个,缺乏可靠的结果让我相信说这个的人是错的,但我确实找到了各种各样的论坛帖子(比如这个)似乎表明他是正确的.但那个帖子也有人说不应该这样.

java garbage-collection jvm

58
推荐指数
5
解决办法
2531
查看次数

声明在C#6中使用字符串插值的长字符串

我通常通过连接来包装长字符串:

Log.Debug("I am a long string. So long that I must " +
    "be on multiple lines to be feasible.");
Run Code Online (Sandbox Code Playgroud)

这非常有效,因为编译器处理字符串文字的连接.我也认为这是处理这个问题最简洁的方法(选项在这里称重).

这种方法适用于String.Format:

Log.Debug(String.Format("Must resize {0} x {1} image " +
    "to {2} x {3} for reasons.", image.Width, image.Height,
    resizedImage.Width, resizedImage.Height));
Run Code Online (Sandbox Code Playgroud)

但是,我现在希望String.Format在这些情况下不再使用,因为C#6的字符串插值更具可读性.我担心的是,我不再有一种高效而又干净的方式来格式化长字符串.

我的问题是编译器是否能以某种方式优化类似的东西

Log.Debug($"Must resize {image.Width} x {image.Height} image " +
    $"to {resizedImage.Width} x {resizedImage.Height} for reasons.");
Run Code Online (Sandbox Code Playgroud)

进入上面的String.Format等价物,或者如果我可以使用的替代方法效率不高(由于不必要的连接),同时保持我的代码结构清晰(根据上面链接中提出的点).

c# code-formatting

29
推荐指数
3
解决办法
7005
查看次数

如何在Visual Studio 2015的工具提示中查看过载签名

当您将鼠标悬停在各种标识符上时,Visual Studio 2015(和旧版本)会有一个工具提示,这些标识符会告诉您类型和方法签名等信息.此功能的屏幕截图如下所示:

当存在重载时,如下所示,我想要一些方法来查看这些重载.我发现这是一种常见的情况,因为我想确定过载是否可能更接近我实际需要的东西.

在第一次输入方法时,这是可能的,并且工具提示中有箭头,表明您可以执行此操作(向上/向下箭头键在此处重载之间切换):

我还注意到这个窗口有更多细节,这在悬停时很有用.然而,一旦代码已经被编写(我似乎必须从头开始键入方法调用),这个对话框就不容易打开了.

单独悬停时有没有办法查看过载?或者更理想的是,当将鼠标悬停在标识符上时能够看到第二个窗口?

它不一定是本机功能.兼容的扩展也可以.我特别想到C#,但它并不一定就是这样.

visual-studio visual-studio-2015

19
推荐指数
1
解决办法
1万
查看次数

使Scala编译器在第一次出错时停止

我想scalac在第一个错误上停止构建.我一直在发现大量的情况,其中所有后续错误都是由第一个错误直接引起的,所以那些后续错误只是噪音,我想删除它.

有没有我可以传递scalac去做的选项?

如果重要的话,我正在开发一个Play Framework项目并通过Activator进行构建(使用~run自动重建更改).

scala

17
推荐指数
1
解决办法
786
查看次数

Scala IDE 4.0.0认为开箱即用的Play Framework 2.3.7程序存在错误

我通过Typesafe Activator创建了一个Play Framework程序(因此它完全遵循模板).

我使用sbteclipse-plugin3.0.0版创建了一个Eclipse项目并将其导入Scala IDE 4.0.0.这些都是撰写本文时的最新版本.

Scala IDE似乎肯定支持Play Framework.它具有自定义格式的语法突出显示,包括路由文件和模板.然而,它似乎无法从控制器中找到视图.特别是,调用views.html.index触发错误:"对象索引不是包views.html的成员".

在此输入图像描述

我尝试使用本机钩子或池进行刷新,如此处详述,但它没有任何影响.

我应该注意,虽然代码已经在命令行(with activator ~run)中编译,但它还没有在Scala IDE中编译,因为我不知道如何(它似乎没有记录在任何地方).

我该怎么做才能摆脱这些错误的错误?

编辑:运行后activator clean ~run,我有另一个错误:在解决构建路径错误之前,无法构建项目.关于这些构建路径错误的内容没有进一步的细节.

scala scala-ide

17
推荐指数
2
解决办法
4636
查看次数

什么可能导致浮点数突然被1位关闭而没有算术变化

在进行稍微大的重构更改而不修改任何类型的算术时,我设法以某种方式更改了我的程序的输出(基于代理的模拟系统).输出中的各种数字现在都是微不足道的数量.检查表明这些数字在最低有效位中偏离了1位.

例如,24.198110084326416将变为24.19811008432642.每个数字的浮点表示为:

24.198110084326416 = 0 10000000011 1000001100101011011101010111101011010011000010010100
24.19811008432642  = 0 10000000011 1000001100101011011101010111101011010011000010010101
Run Code Online (Sandbox Code Playgroud)

其中我们注意到最低有效位是不同的.

我的问题是,当我没有修改任何类型的算术时,我是如何引入这种变化的?该更改涉及通过删除继承来简化对象(其超类因使用不适用于此类的方法而膨胀).

我注意到输出(在模拟的每个刻度处显示某些变量的值)有时会关闭,然后对于另一个滴答,数字是预期的,只有在下一个滴答时再次关闭(例如,在一个代理上) ,它的值在刻度57-83上表现出这个问题,但是对于刻度84和85是预期的,只有在刻度线86处再次关闭).

我知道我们不应该直接比较浮点数.当仅将输出文件与预期输出进行比较的集成测试失败时,会注意到这些错误.我可以(也许应该)修复测试来解析文件并将解析后的双打与一些epsilon进行比较,但我仍然很好奇为什么可能引入这个问题.

编辑:

引入问题的最小变化差异:

diff --git a/src/main/java/modelClasses/GridSquare.java b/src/main/java/modelClasses/GridSquare.java
index 4c10760..80276bd 100644
--- a/src/main/java/modelClasses/GridSquare.java
+++ b/src/main/java/modelClasses/GridSquare.java
@@ -63,7 +63,7 @@ public class GridSquare extends VariableLevel
    public void addHousehold(Household hh)
    {
        assert household == null;
-       subAgents.add(hh);
+       neighborhood.getHouseholdList().add(hh);
        household = hh;
    }

@@ -73,7 +73,7 @@ public class GridSquare extends VariableLevel
    public void removeHousehold()
    {
        assert household != null;
-       subAgents.remove(household);
+       neighborhood.getHouseholdList().remove(household);
        household …
Run Code Online (Sandbox Code Playgroud)

java floating-point floating-point-precision

15
推荐指数
1
解决办法
363
查看次数

处理多个for循环中声明的变量的最惯用方法是什么?

JavaScript只有函数范围.因此,for循环中声明的变量对于整个函数是可见的.

例如,

function foo() {
    for(var i = 0; i < n; i++) {
        // Do something
    }
    // i is still in scope here
}
Run Code Online (Sandbox Code Playgroud)

当我们有多个for循环时,这就打开了我们如何处理这些其他for循环中的变量的问题.

我们使用不同的变量吗?

for(var i = 0; i < n; i++) { }
for(var j = 0; j < n; j++) { }
Run Code Online (Sandbox Code Playgroud)

或者我们使用相同的变量,但只是分配一个值(而不是声明它)?

for(var i = 0; i < n; i++) { }
for(i = 0; i < n; i++) { }
Run Code Online (Sandbox Code Playgroud)

或者i在循环之外声明?

var i;
for(i = 0; i < n; i++) …
Run Code Online (Sandbox Code Playgroud)

javascript idioms

12
推荐指数
1
解决办法
150
查看次数

为什么Slick需要使用三个等号(===)进行比较?

我正在阅读从SQL到Slick的内容,它表示要使用===而不是==用于比较.

例如,

people.filter(p => p.age >= 18 && p.name === "C. Vogt").run
Run Code Online (Sandbox Code Playgroud)

==和之间有什么区别===,为什么后者在这里使用?

scala slick

10
推荐指数
2
解决办法
4699
查看次数

使JFileChooser选择文件名的文本而不是扩展名

我希望JFileChooser保存对话框的文件名字段中的文本只选择文件名而不是扩展名.

我目前有这个:

它目前的样子

并希望它看起来像这样:

理想情况下它看起来像什么

这是一个简单的更改,但在我看来,这使得保存文件更容易,因为用户可以立即开始输入文件名而不会意外删除扩展名.

我知道如果缺少扩展名,我可以强行添加扩展名,但我宁愿不这样做,因为扩展名不是强制性的,我觉得不应该强制执行.

那么,有什么办法可以实现这个目标吗?

java swing jfilechooser

7
推荐指数
1
解决办法
1724
查看次数