我似乎无法让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) 众所周知,GC有时会在内存中移动对象.而且我的理解是,只要在移动对象时(在调用任何用户代码之前)更新所有引用,这应该是非常安全的.
但是,我看到有人提到参考比较可能是不安全的,因为GC在参考比较的中间移动了对象,这样即使两个引用都应该引用同一个对象,比较也可能失败?
即,是否存在以下代码不能打印"真实"的情况?
Foo foo = new Foo();
Foo bar = foo;
if(foo == bar) {
System.out.println("true");
}
Run Code Online (Sandbox Code Playgroud)
我试着谷歌搜索这个,缺乏可靠的结果让我相信说这个的人是错的,但我确实找到了各种各样的论坛帖子(比如这个)似乎表明他是正确的.但那个帖子也有人说不应该这样.
我通常通过连接来包装长字符串:
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等价物,或者如果我可以使用的替代方法效率不高(由于不必要的连接),同时保持我的代码结构清晰(根据上面链接中提出的点).
当您将鼠标悬停在各种标识符上时,Visual Studio 2015(和旧版本)会有一个工具提示,这些标识符会告诉您类型和方法签名等信息.此功能的屏幕截图如下所示:

当存在重载时,如下所示,我想要一些方法来查看这些重载.我发现这是一种常见的情况,因为我想确定过载是否可能更接近我实际需要的东西.
在第一次输入方法时,这是可能的,并且工具提示中有箭头,表明您可以执行此操作(向上/向下箭头键在此处重载之间切换):

我还注意到这个窗口有更多细节,这在悬停时很有用.然而,一旦代码已经被编写(我似乎必须从头开始键入方法调用),这个对话框就不容易打开了.
单独悬停时有没有办法查看过载?或者更理想的是,当将鼠标悬停在标识符上时能够看到第二个窗口?
它不一定是本机功能.兼容的扩展也可以.我特别想到C#,但它并不一定就是这样.
我想scalac在第一个错误上停止构建.我一直在发现大量的情况,其中所有后续错误都是由第一个错误直接引起的,所以那些后续错误只是噪音,我想删除它.
有没有我可以传递scalac去做的选项?
如果重要的话,我正在开发一个Play Framework项目并通过Activator进行构建(使用~run自动重建更改).
我通过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,我有另一个错误:在解决构建路径错误之前,无法构建项目.关于这些构建路径错误的内容没有进一步的细节.
在进行稍微大的重构更改而不修改任何类型的算术时,我设法以某种方式更改了我的程序的输出(基于代理的模拟系统).输出中的各种数字现在都是微不足道的数量.检查表明这些数字在最低有效位中偏离了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) 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) 我正在阅读从SQL到Slick的内容,它表示要使用===而不是==用于比较.
例如,
people.filter(p => p.age >= 18 && p.name === "C. Vogt").run
Run Code Online (Sandbox Code Playgroud)
==和之间有什么区别===,为什么后者在这里使用?
我希望JFileChooser保存对话框的文件名字段中的文本只选择文件名而不是扩展名.
我目前有这个:

并希望它看起来像这样:

这是一个简单的更改,但在我看来,这使得保存文件更容易,因为用户可以立即开始输入文件名而不会意外删除扩展名.
我知道如果缺少扩展名,我可以强行添加扩展名,但我宁愿不这样做,因为扩展名不是强制性的,我觉得不应该强制执行.
那么,有什么办法可以实现这个目标吗?