我刚刚阅读了Java 7预览演示文稿(pdf),链接调用上有一张幻灯片.以下是幻灯片中使用的示例:
// Construction with setters
DrinkBuilder margarita = new DrinkBuilder();
margarita.add("tequila");
margarita.add("orange liqueur");
margarita.add("lime juice");
margarita.withRocks();
margarita.withSalt();
Drink drink = margarita.drink();
// Construction with chained invocation
Drink margarita = new DrinkBuilder()
.add("tequila")
.add("orange liqueur")
.add("lime juice")
.withRocks()
.withSalt()
.drink();
Run Code Online (Sandbox Code Playgroud)
我对此感到复杂.不应该将太多的方法调用链接到一个语句中.在另一方面,写作margarita.this()和margarita.that()不是太方便无论是.
现在,我从Delphi世界来到Java.在Delphi中有with语言结构.这是少数人所珍惜和许多人的厌恶(或者是相反的方式?).我觉得with比链式调用的想法更优雅(我认为它基于void方法返回对它被调用的对象的引用 - 这是我不喜欢的部分,因为void应该什么都不返回).
我很欣赏withJava采用的语言功能,因此示例代码可以像这样编写:
Drink margarita = null;
with (new DrinkBuilder()) {
add("tequila");
add("orange liqueur");
add("lime juice");
withRocks();
withSalt(); …Run Code Online (Sandbox Code Playgroud) 我正在尝试学习nio 2Java 7中的包,我偶然发现了这个Files.readAllLines(Path p, Charset cs)方法.我发现它非常有用,但我认为应该有一个没有cs参数的版本,就像:
public static List<String> readAllLines(String path)
throws IOException
{ return readAllLines(Paths.get(path), Charset.defaultCharset());}
Run Code Online (Sandbox Code Playgroud)
我确信无论如何大多数时候都会使用默认的Charset调用该方法,所以为什么没有shorcut.是否有任何关于charsets的遗漏可以证明没有这种方法?我很惊讶,因为Scala有这个选项:
Source.fromFile("fileName").getLines
Run Code Online (Sandbox Code Playgroud)
所以我不明白为什么Java不应该.任何意见?
为了帮助Java应用程序在Mac OS X上运行时看起来更像本机应用程序,Apple创建了Apple Java Extensions,以使Java应用程序更像Mac OS X.这些允许处理"关于"的行为菜单和支持拖放到应用程序图标.
但是,我找不到任何指示这些扩展是否包含在Java 7中甚至可用于Java 7的内容.我理解Apple将其OS X实现合并到OpenJDK中,但我不确定这些扩展是否已经过用它.我确实看到OpenJDK的Mac OS X端口的目标是"包含一个完整的,基于Cocoa的原生UI工具包",但我找不到太多关于它的含义.搜索网络并未取得丰硕成果,我不知道它们是否与Java 7兼容,甚至包括在内.
所以我猜我有三个问题:
我正在使用桌面Java应用程序,并且已经使用JDK 6通过IDE进行开发.我使用渲染提示VALUE_FRACTIONALMETRICS_ON和其他提示来更好地渲染JLabel中的文本.这些提示在JVM 1.6上运行得非常漂亮,但我最近注意到,VALUE_FRACTIONALMETRICS_ON当我使用JRE运行应用程序时,它似乎完全忽略了1.7我在这里做错了什么让Java 7忽略了这些提示?
lblDate = new ATimeLabel(ATimeLabel.DATE_LETTERS) {
private static final long serialVersionUID = 1L;
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
super.paintComponent(g2d);
}
};
Run Code Online (Sandbox Code Playgroud)
FRACTIONALMETRICS对文本具有最明显的视觉效果,因此让我的工作就是我想要做的.
这是一个屏幕截图比较,当我从我的IDE(左)运行应用程序时使用Java 6,当我双击Jar文件时,它自己(右)使用我的系统JRE,Java 7.(我还临时添加红色边框以显示paint方法确实有效)
任何帮助将非常感谢.

我在Windows 7上安装了JAVA SDK 1.7.0.170,我需要升级到1.7.0.250.有命令行选项吗?
用于python更新的任何PIP等价物?
我正在阅读Java的Play框架,但没有太多的Java经验.有人可以解释一下
Promise<Double> promiseOfPIValue = computePIAsynchronously();
Promise<Result> promiseOfResult = promiseOfPIValue.map(
new Function<Double,Result>() {
public Result apply(Double pi) {
return ok("PI value computed: " + pi);
}
}
);
Run Code Online (Sandbox Code Playgroud)
我知道他们正在创建一个promiseOfPiValue应该异步计算双重的承诺.然后,他们调用map那个他们传递一个新实例Function作为参数的promise实例,该实例实现了一个apply方法.
地图部分是我迷路的地方 - 地图方法如何运作?看起来它返回了一个新的类型的承诺Result,但是在实现中调用apply方法的逻辑是什么Function?
使用Java 7 我正在尝试构建一个监视数据存储(某些集合类型)的观察程序,然后在某些点返回某些项目.在这种情况下,它们是时间戳,当时间戳通过我希望它返回到起始线程的当前时间.请参阅下面的代码.
@Override
public void run() {
while (!data.isEmpty()) {
for (LocalTime dataTime : data) {
if (new LocalTime().isAfter(dataTime)) {
// return a result but continue running
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经阅读了关于未来和可赎回的内容,但他们似乎在回归时停止了这个问题.
我不特别想要返回一个值并停止线程,然后启动另一个任务,如果使用callable,除非这是最好的方法.
寻找这个的最佳技术是什么?似乎有这么广泛的做法.
谢谢
在使用java 7提供的HashMap时,我遇到了get()从O(1)演变为O(n)的问题,如此处所述,并在java 8中解决.
但是因为我必须坚持使用java 7并且无法升级项目,我正在寻找一个库或任何方式来获得一个快速且常量的get().
我刚刚发现这个,因为我的一个单元测试由于从Java 7升级到Java 8而失败.单元测试调用一个方法,该方法试图在一个在子类上注释但具有不同返回类型的方法上查找注释.
在Java 7中,isAnnotationPresent似乎只能找到注释,如果它们真的是在代码中声明的.在Java 8中,isAnnotationPresent似乎包含在子类中声明的注释.
为了说明这一点,我创建了一个简单的(??)测试类IAPTest(用于IsAnnotationPresentTest).
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
public class IAPTest {
@Retention(RetentionPolicy.RUNTIME)
public static @interface Anno {
}
public static interface I {
}
public static interface IE extends I {
}
public static class A {
protected I method() {
return null;
}
}
public static class B extends A {
@Anno
protected IE method() {
return null;
}
}
public static void main(String[] args) {
for (Method method …Run Code Online (Sandbox Code Playgroud) 我有一个数组列表,看起来像:
[new Class1(), new Class2(), new Class1(), new Class1()]
Run Code Online (Sandbox Code Playgroud)
我想知道在数组列表中提取Class1实例数的最有效方法.
对于上面的例子,我想要答案3.
我使用的是Java版"1.7.0_79".
java-7 ×10
java ×9
java-8 ×2
annotations ×1
callable ×1
dictionary ×1
hashmap ×1
java-2d ×1
macos ×1
monitor ×1
nio2 ×1
promise ×1
reflection ×1
sdk ×1
swing ×1