看来JSR 292将为JVM添加对动态语言的支持,但我没有看到很多关于它的细节.动态类型是否会被合并到语言中(或仅仅是VM)?如果是这样,语义会是什么样子?
会不会有类似C#4的东西:
dynamic x = 10, y = 5;
Console.WriteLine(x + y);
Run Code Online (Sandbox Code Playgroud) 我正在玩JDK 7的Java NIO.2 API.
特别是,我想调用方法: Paths#get(String first, String... more)
这是一个静态方法,它至少接收一个字符串,并返回与之对应的Path对象.有一个重载的形式:Paths#get(URI uri)
但是,我似乎无法从Clojure调用top方法.我最近能得到的是:
(Paths/get ^String dir-fq (object-array 0))
Run Code Online (Sandbox Code Playgroud)
失败的是:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
Run Code Online (Sandbox Code Playgroud)
正如你所料.毕竟,我们将Object []传递给期望String []的东西.
我已经尝试删除(对象数组)表单 - 但这只会导致Clojure尝试调用get(URI)方法 - 无论是否有类型提示.
将nil作为Paths#get(String,String ...)的第二个参数传递会导致调用正确的方法,但Java 7随后会因NPE而失败.
我似乎无法在Clojure中找到表达String []类型的方法 - 我猜我需要这样做或者为调度系统提供一个提示.
有任何想法吗?
从SecondaryLoop的文档中,不清楚何时应该使用这个新功能而不是SwingWorker,一些有趣的案例会很有用.
在升级到Lion和Java 7后,我遇到了JTables的问题.当我使用箭头键移动选择时,它setValueAt()使用空字符串作为编辑值进行调用.
为了测试这个,我创建了一个带有表的简单JFrame,并将以下类设置为其模型.
public class SpyModel extends AbstractTableModel {
public int getColumnCount() { return 5; }
public int getRowCount() { return 5; }
public Object getValueAt(int rowIndex, int columnIndex) { return ""; }
public boolean isCellEditable(int rowIndex, int columnIndex) { return true; }
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
System.out.println(aValue == null ? "null" : "\"" + aValue + "\"");
}
}
Run Code Online (Sandbox Code Playgroud)
当我在Java 6下运行它,然后使用箭头键移动它.它工作正常.例如
$ java -version
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build …Run Code Online (Sandbox Code Playgroud) 以下代码将有助于说明我的问题:
import java.util.Locale;
import java.text.*;
public class LocaleTest {
public static void main(String[] args) {
System.out.println(Locale.getDefault());
System.out.println("java-version-" +System.getProperty("java.version"));
System.setProperty("sun.locale.formatasdefault","true");
System.out.println("prop:" +System.getProperty("sun.locale.formatasdefault"));
System.out.println("getLocale-" +Locale.getDefault());
}
}
Run Code Online (Sandbox Code Playgroud)
我们知道,在Java 7中,Locale.getDefault()中存在错误.但是,正如Oracle所建议的那样,我将系统属性"sun.locale.formatasdefault"设置为true.即使我现在正在获取我的m/c Locale,它仍然显示为en_US,即使我的m/c Locale设置为fr_BE.
以下是上述代码的输出,它是在Java 1.7.0_09上编译和运行的:
en_US java-version-1.7.0_09 prop:true getLocale-en_US
关于可能导致什么的任何想法?提前谢谢了.
我有一段代码,用于获取文本并生成带阴影效果的图标以分配给各种组件(如下所示).在Java 7中,这种方法起到了很大作用,其中反锯齿逻辑中的某些内容发生了变化,现在看起来非常糟糕,而在Java 6中,相同的代码看起来很棒.
最后一张图片实际上看起来还不错,所以似乎只会出现某些颜色组合......
无论如何,有没有人知道Java 7中AA的变化,或者如何更改它或者像Java 6中那样工作?或者我为了打破AA而抱怨谁?哈哈...
在此先感谢您的帮助!
AA http://i43.tinypic.com/v5v5vr.jpg
package mainpackage;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.font.TextAttribute;
import java.awt.font.TextLayout;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.text.AttributedString;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class AntiAliasProblems
{
private static final long serialVersionUID = 1L;
private static Font font = new Font("Arial", Font.BOLD, 12);
public static ImageIcon makeShadowIcon1()
{
AttributedString as = new AttributedString("Delete"); …Run Code Online (Sandbox Code Playgroud) 我遇到了一点混乱.
我知道那个String对象是不可变的.这意味着如果我从String类中调用一个方法,replace()那么原始内容String就不会改变.而是基于原始返回new String.但是,可以为同一变量分配新值.
基于这个理论,我总是写a = a.trim()在那里a是一个String.一切都很好,直到我的老师告诉我,a.trim()也可以使用.这搞砸了我的理论.
我和老师一起测试了我的理论.我使用了以下代码:
String a = " example ";
System.out.println(a);
a.trim(); //my teacher's code.
System.out.println(a);
a = " example ";
a = a.trim(); //my code.
System.out.println(a);
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
example
example
example
Run Code Online (Sandbox Code Playgroud)
当我向老师指出时,她说,
这是因为我使用的是较新版本的Java(jdk1.7)并且
a.trim()在以前版本的Java中工作.
请告诉我谁有正确的理论,因为我完全不知道!
使用BlockingQueue消耗生成的数据时,等待数据出现的最有效方法是什么?
场景:
步骤1)数据列表将是添加时间戳的数据存储.这些时间戳需要按最接近当前时间优先级排序.此列表可能为空.线程将时间戳插入其中.生产
步骤2)我想在另一个线程中使用此处的数据,该线程将从数据中获取时间戳并检查它们是否在当前时间之后.消费者然后生产
步骤3)如果它们在当前时间之后,则将它们发送到另一个线程以供消费和处理.在此处理时间戳数据后,从步骤1数据存储中删除.消费然后编辑原始列表.
在下面的代码中,数据字段引用步骤1中的数据存储.结果是在当前时间之后已发送的时间戳列表.步骤2.然后将结果消耗步骤3.
private BlockingQueue<LocalTime> data;
private final LinkedBlockingQueue<Result> results = new LinkedBlockingQueue<Result>();
@Override
public void run() {
while (!data.isEmpty()) {
for (LocalTime dataTime : data) {
if (new LocalTime().isAfter(dataTime)) {
results.put(result);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题 等待数据列表中可能可能为空的数据的最有效方法是什么?专注于:
while (!data.isEmpty())
Run Code Online (Sandbox Code Playgroud)
以前的问题.
根据Future我的理解,获得a的唯一方法是使用an ExecutorService,例如通过获取Executors.newFixedThreadPool(10)(顺便说一句,你如何使用多少线程?是否有一些拇指规则?).
所以我不明白,我是否应该使用:
ExecutorService executorService = Executors.newFixedThreadPool(n);
Run Code Online (Sandbox Code Playgroud)
然后保存它(例如在某些顶层IoC)并executorService在需要新的时候调用它Future?
是不是像ExecutorService我可以使用的默认Java内置,从而避免了ExecutorService初始化和维护的唠叨?
我正在阅读Java8集合界面文档.我注意到Java8 Collection Interface在描述中添加了这一段,它不包含在Java7 Collection Interface中.
执行集合的递归遍历的某些集合操作可能会失败,而自引用实例的例外情况是集合直接或间接包含自身.这包括clone(),equals(),hashCode()和toString()方法.实现可以可选地处理自引用场景,但是大多数当前实现不这样做.
关于为什么要包含这一段,我有点困惑.是因为Java7不能拥有直接或间接包含自身集合的自引用实例吗?然后Java8引入了新的界面或一些允许的新功能?
我正在寻找详细的解释,如果你举一个例子来说明你的观点,那将会很棒.谢谢!
java-7 ×10
java ×9
swing ×3
android ×1
antialiasing ×1
clojure ×1
concurrency ×1
java-8 ×1
jdk1.4 ×1
jvm ×1
osx-lion ×1
string ×1
swingworker ×1