是否可以将Velocity引用设置为"null"或"undefined"?
#set- 建立参考格式的值:
# [ { ] set [ } ] ( $ref = [ ", ' ]arg[ ", ' ] )用法:
$ref- 赋值的LHS必须是变量引用或属性引用.
arg- 赋值的RHS,arg如果用双引号括起来解析,如果用单引号括起来则不解析.如果RHS评估为null,则不会将其分配给LHS.(强调我的)
我找不到等效的#unset宏.
我们有一个Java项目,其中包含大量用于用户提示,错误消息等的英语字符串.我们希望将所有可翻译的字符串提取到属性文件中,以便以后可以翻译它们.
例如,我们想要替换:
Foo.java
String msg = "Hello, " + name + "! Today is " + dayOfWeek;
Run Code Online (Sandbox Code Playgroud)
有:
Foo.java
String msg = Language.getString("foo.hello", name, dayOfWeek);
Run Code Online (Sandbox Code Playgroud)
language.properties
foo.hello = Hello, {0}! Today is {1}
Run Code Online (Sandbox Code Playgroud)
我知道以完全自动化的方式完成此操作几乎是不可能的,因为不是每个字符串都应该被翻译.但是,我们想知道是否有一种半自动化方式可以消除一些劳动力.
我有一个相对复杂的泛型类型(比如说Map<Long,Map<Integer,String>>),我在课堂内部使用它.(没有外部可见性;它只是一个实现细节.)我想在typedef中隐藏它,但Java没有这样的功能.
昨天我重新发现了以下成语,并且对于被认为是反模式感到失望.
class MyClass
{
/* "Pseudo typedef" */
private static class FooBarMap extends HashMap<Long,Map<Integer,String>> { };
FooBarMap[] maps;
public FooBarMap getMapForType(int type)
{
// Actual code might be more complicated than this
return maps[type];
}
public String getDescription(int type, long fooId, int barId)
{
FooBarMap map = getMapForType(type);
return map.get(fooId).get(barId);
}
/* rest of code */
}
Run Code Online (Sandbox Code Playgroud)
当类型被隐藏并且不构成库API的一部分时(在我看来,Goetz对使用它的主要反对意见),是否有任何理由可以解决这个问题?
我想使用Java 1.6中的java.text.Normalizer类来进行Unicode规范化,但我的代码必须能够在Java 1.5上运行.
我不介意在1.5上运行的代码是否不进行规范化,但我不希望它在运行时给出NoClassDefFoundErrors或ClassNotFoundExceptions.
实现这一目标的最佳方法是什么?
假设我有一个String我想在代码中表示的对象,我想生成一个映射到同一个东西的字符串文字.
例
hello, "world"
goodbye
Run Code Online (Sandbox Code Playgroud)
变
hello, \"world\"\ngoodbye
Run Code Online (Sandbox Code Playgroud)
我正准备编写一个状态机,逐字符地提取字符串并适当地转义,但后来我想知道是否有更好的方法,或者提供了执行此操作的函数的库.
哪种方法是从Java调用本机库的最快方法?
我所知道的是
保持类型的非数字(NaN)值的常量
double.它相当于返回的值Double.longBitsToDouble(0x7ff8000000000000L).
这似乎暗示还有其他人.如果是这样,我如何抓住它们,这可以移植吗?
需要明确的是,我想找到的double值x,使得
Double.doubleToRawLongBits(x) != Double.doubleToRawLongBits(Double.NaN)
Run Code Online (Sandbox Code Playgroud)
和
Double.isNaN(x)
Run Code Online (Sandbox Code Playgroud)
都是真的.
DataInput.skipBytes的Sun文档声明它"尝试从输入流中跳过n个字节的数据,丢弃跳过的字节.但是,它可能会跳过一些较小的字节数,可能为零.这可能是由于任何一个条件;在跳过n个字节之前到达文件末尾只有一种可能性."
除了到达文件末尾,为什么可能skipBytes()不会跳过正确的字节数?(DataInputStream我正在使用的将要包装一个FileInputStream或一个PipedInputStream.)
如果我肯定想跳过n个字节并抛出一个EOFException如果这导致我转到文件的末尾,我应该使用readFully()并忽略生成的字节数组吗?或者,还有更好的方法?
我有一个Java Maven项目,包含大约800个源文件(一些由javacc/JTB生成),用javac编译需要25分钟.
当我将pom.xml更改为使用Eclipse编译器时,编译大约需要30秒.
有关为什么javac(1.5)运行如此缓慢的任何建议?(我不想永久切换到Eclipse编译器,因为Maven的插件似乎不仅仅是一个小错误.)
我有一个测试用例,很容易重现问题.以下代码在默认包中生成许多源文件.如果您尝试使用javac编译ImplementingClass.java,它似乎会暂停很长时间.
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
public class CodeGenerator
{
private final static String PATH = System.getProperty("java.io.tmpdir");
private final static int NUM_TYPES = 1000;
public static void main(String[] args) throws FileNotFoundException
{
PrintStream interfacePs = new PrintStream(PATH + File.separator + "Interface.java");
PrintStream abstractClassPs = new PrintStream(PATH + File.separator + "AbstractClass.java");
PrintStream implementingClassPs = new PrintStream(PATH + File.separator + "ImplementingClass.java");
interfacePs.println("public interface Interface<T> {");
abstractClassPs.println("public abstract class AbstractClass<T> implements Interface<T> {");
implementingClassPs.println("public class ImplementingClass extends AbstractClass<Object> …Run Code Online (Sandbox Code Playgroud) 如果我有一个格式的数字变量,有没有办法将格式化的值作为字符变量?
例如,我想写下面的东西来打印10/06/2009到屏幕但没有putformatted()功能.
data test;
format i ddmmyy10.;
i = "10JUN2009"d;
run;
data _null_;
set test;
i_formatted = putformatted(i); /* How should I write this? */
put i_formatted;
run;
Run Code Online (Sandbox Code Playgroud)
(显然我可以写put(i, ddmmyy10.),但我的代码需要适用于任何格式i.)