Eclipse Indigo是3.7,Eclipse Juno是4.2,但3.8M1刚刚发布.什么是3.8,这与3.7有什么不同?我迫不及待地等待Java 7的支持,我很困惑是否应该使用3.8M1或等待3.7.1
我必须在这里遗漏一些明显的东西......我找到了这个<property> 任务的在线文档,但我找不到<path>任务,例如:
<path id="client.classpath">
<fileset dir="${libDir}">
<include name="*.jar"/>
</fileset>
</path>
Run Code Online (Sandbox Code Playgroud)
记录在哪里<path>?
我想要一个由管理数据的几个任务生成的诊断日志.这些任务可能在多个线程中.每个任务都需要将一个元素(可能带有子元素)写入日志; 进去快点出去.如果这是一个单任务的情况,我会使用XMLStreamWriter,因为它似乎是简单/功能的最佳匹配,而不必在内存中保存一个膨胀的XML文档.
但这不是一个单任务的情况,我不确定如何最好地确保这是"线程安全",其中"线程安全"在这个应用程序中意味着每个日志元素应该正确和连续地写入日志(一个后另一个,不以任何方式交错).
有什么建议?我有一个模糊的直觉,即要使用的方法是使用一个日志元素队列(每个元素都可以快速生成:我的应用程序忙于执行对性能敏感的实际工作),并且有一个单独的线程来处理日志元素并将它们发送到文件,以便日志记录不会中断生产者.
日志记录不一定必须是XML,但我确实希望它是结构化的和机器可读的.
编辑:我把"threadsafe"放在引号中.Log4j似乎是一个显而易见的选择(对我来说很新但对社区来说很老),为什么重新发明轮子...
我需要解码包含查询字符串的URI; 预期的输入/输出行为类似于以下内容:
abstract class URIParser
{
/** example input:
* something?alias=pos&FirstName=Foo+A%26B%3DC&LastName=Bar */
URIParser(String input) { ... }
/** should return "something" for the example input */
public String getPath();
/** should return a map
* {alias: "pos", FirstName: "Foo+A&B=C", LastName: "Bar"} */
public Map<String,String> getQuery();
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用java.net.URI,但它似乎解码了查询字符串所以在上面的例子中我留下了"alias = pos&FirstName = Foo + A&B = C&LastName = Bar"所以有一个歧义"是& "是查询分隔符,或者是查询组件中的字符.
编辑:我刚刚尝试了URI.getRawQuery()并且它没有进行编码,所以我可以用a分割查询字符串&,但是我该怎么办?Javascript有decodeURIComponent,我似乎无法在Java中找到相应的方法.
有什么建议?我宁愿不使用任何新库.
如果我有
public <T> doSomething(T[] array)
{
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能T.class从array?
如果我这样做array.getClass(),那就T[].class取而代之.
我理解集合的get和put原则:如果一个方法接受一个集合,它将写入一个类型T,参数必须是Collection<? super T>,而如果它将读取一个类型T,参数必须是Collection<? extends T>.
但有人可以解释Collections.max()签名:
public static <T> T max(Collection<? extends T> coll,
Comparator<? super T> comp)
Run Code Online (Sandbox Code Playgroud)
特别是为什么它Comparator<? super T>而不是Comparator<? extends T>?
在静态上下文中,为什么不能调用静态版本getClass()(而不是必须使用my.package.name.MyClassName.class)?
是不是编译器足够智能,以确定何时使用对象方法+何时使用静态方法?
注意清楚:
我不是说,一个static getClass()应该使用替代的非静态方法getClass()(这是一种明显的-如果SpecialFoo是的子类Foo,那么getClass()一个Foo可以返回Foo.class或SpecialFoo.class或别的东西,它有在运行时确定).
我说我想知道为什么不存在两个版本getClass(),一个是静态方法,只适用于静态上下文,以及常规的非静态方法getClass().如果不可能,那就不可能了,那就是答案.如果它可能但是还没有完成,那么这是一个历史选择,也许这是一个很好的理由.这就是我想知道的.
宣布这将是伟大的
final static Logger logger = LoggerFactory.getLogger(getClass());
Run Code Online (Sandbox Code Playgroud)
代替
final static Logger logger = LoggerFactory.getLogger(my.package.name.MyClass.class);
Run Code Online (Sandbox Code Playgroud)
前者可以从一个类逐字复制到下一个类,而后者则要求您在每个文件中复制类名.
一个线程从数组的一个索引读取是否有任何并发问题,而另一个线程写入数组的另一个索引,只要索引不同?
例如(这个例子不一定推荐用于实际用途,仅用于说明我的观点)
class Test1
{
static final private int N = 4096;
final private int[] x = new int[N];
final private AtomicInteger nwritten = new AtomicInteger(0);
// invariant:
// all values x[i] where 0 <= i < nwritten.get() are immutable
// read() is not synchronized since we want it to be fast
int read(int index) {
if (index >= nwritten.get())
throw new IllegalArgumentException();
return x[index];
}
// write() is synchronized to handle multiple writers
// (using compare-and-set techniques to avoid …Run Code Online (Sandbox Code Playgroud) 我正在尝试设置一个可变长度的零矩阵,其中有两列我可以输出while循环的结果(目的是使用它来存储来自Euler方法的步骤数据和调整后的时间步长).长度将由循环的迭代次数确定.
我想知道是否有一种方法可以在我运行循环时执行此操作,或者是否需要将其设置为开始,以及如何执行此操作.
我如何在start()下面打电话?
package com.example.test;
class Bar {}
public class Foo<K>
{
final private int count;
final private K key;
Foo(Builder<K> b)
{
this.count = b.count;
this.key = b.key;
}
public static class Builder<K2>
{
int count;
K2 key;
private Builder() {}
static public <K3> Builder<K3> start() { return new Builder<K3>(); }
public Builder<K2> setCount(int count) { this.count = count; return this; }
public Builder<K2> setKey(K2 key) { this.key = key; return this; }
public Foo<K2> build() { return new …Run Code Online (Sandbox Code Playgroud) java ×8
generics ×3
arrays ×2
ant ×1
builder ×1
comparator ×1
concurrency ×1
decoding ×1
eclipse ×1
eclipse-juno ×1
logging ×1
matlab ×1
matrix ×1
query-string ×1
static ×1