我有这个Java源代码:
package org.test;
import java.text.SimpleDateFormat;
import java.util.Date;
public class GetDateFormat {
private static final SimpleDateFormat DATE_FORMAT =
new SimpleDateFormat("dd/MM/yyyy");
public static void main(String[] args) {
System.out.println("Date : " + DATE_FORMAT.format(new Date()) + " !");
}
}
我使用Eclipse AST解析它。
我得到了DATE_FORMAT.format(new Date())
方法调用的引用。
我想知道将使用什么日期格式。
我成功找到了DATE_FORMAT
声明的引用,但我想进一步了解new SimpleDateFormat("dd/MM/yyyy")
初始化声明,然后是构造函数的第一个参数:"dd/MM/yyyy"
。
怎么做?
这是我得到的最远的地方:
private static void getDateFormat(MethodInvocation methodInvocation) {
// methodInvocation => DATE_FORMAT.format(new Date())
// methodInvocation.getExpression() => DATE_FORMAT
if (methodInvocation.getExpression() instanceof SimpleName) {
// nameBinding => private static final java.text.SimpleDateFormat DATE_FORMAT
IBinding nameBinding = ((SimpleName) methodInvocation.getExpression()).resolveBinding();
if (nameBinding instanceof IVariableBinding) {
IVariableBinding variableBinding = (IVariableBinding) nameBinding;
// TODO And now what?! How to get the initialization?! : new SDF("dd/MM/yyyy")
}
}
}
在Eclipse中进行调试时,我发现nameBinding
的类型为VariableBinding
,并且其字段binding
的字段为LocalVariableBinding
,其字段为declaration
输入值LocalDeclaration
的{{1}}:
所以Eclipse知道SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy")
是如何初始化的。但是字段DATE_FORMAT
是私有的。如果不诉诸黑暗权力(内省以获得私人领域的价值),如何以一种干净的方式获得binding
?