public class LocalVarTest { public static void main(String[] args) {
LocalVar var = new LocalVar();
var.doNext();
}}class LocalVar{
private Scorer[] scorers;
private boolean more;
private int lastDoc;
public boolean doNext(){
int first=0;
Scorer lastScorer = scorers[scorers.length-1];
Scorer firstScorer;
while (A.isTrue(more && (firstScorer=scorers[first]).doc() < (lastDoc=lastScorer.doc()), 1, 2)) {
more = firstScorer.skipTo(lastDoc);
lastScorer = firstScorer;
first = (first == (scorers.length-1)) ? 0 : first+1;
}
return more;
}
}class A{
private static int[] a = new int[100];
public static boolean isTrue(boolean isA, int i, int j){
a[i] = j;
return isA;
}
}class Scorer{ public int doc() {
return 0;
} public boolean skipTo(int lastDoc) {
return false;
}
}
一直报 The local variable firstScorer may not have been initialized 错误,如果把 firstScorer 赋个初值,如:
firstScorer = null
就没有问题了,现在问题是代码是动态的,不方便赋值,不知有什么方法解决?谢谢!
firstScorer=scorers[first]
Scorer scorer1 = new Scorer();
Scorer scorer2 = new Scorer();
Scorer[] scorers = {scorer1, scorer2};
LocalVar var = new LocalVar(scorers);
var.doNext();
}}class LocalVar{
private Scorer[] scorers;
private boolean more;
private int lastDoc;
public LocalVar(Scorer[] scorers){
this.scorers = scorers;
}
public boolean doNext(){
int first=0;
Scorer lastScorer = scorers[scorers.length-1];
Scorer firstScorer = null;
while (A.isTrue(more && (firstScorer=scorers[first]).doc() < (lastDoc=lastScorer.doc()), 1, 2)) {
more = firstScorer.skipTo(lastDoc);
lastScorer = firstScorer;
first = (first == (scorers.length-1)) ? 0 : first+1;
}
return more;
}
}class A{
private static int[] a = new int[100];
public static boolean isTrue(boolean isA, int i, int j){
a[i] = j;
return isA;
}
}class Scorer{ public int doc() {
return 0;
} public boolean skipTo(int lastDoc) {
return false;
}
}
public interface LocalVarInterface{
public boolean doNext();
}//实现接口
public class LocalVar implements LocalVarInterface{
private Scorer[] scorers;
private boolean more;
private int lastDoc;
public boolean doNext(){
//里面没办法了,编译期错误,又不想给变量赋值,干脆清空了
return true;
}
}//代理
public class ProxyFactory implements InvocationHandler{ private Object lvar;
public Object createLocalValProxy(Object obj){
this.lvar = obj;
return Proxy.newProxyInstance(this.lvar.getClass().getClassLoader(), this.lvar.getClass().getInterfaces(), this);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
LocalVar var = (LocalVar)this.lvar;
Boolean bl = new Boolean(false);
//里面去处理,返回true或者false
return bl;
}
}
//main
LocalVar lv =new LocalVar();
ProxyFactory factory = new ProxyFactory();
LocalVarInterface lviface = (LocalVar)factory.createStudentProxy(lv);
lviface.doNext();
http://www.iteye.com/problems/8679