将类型转换变量传递给通用编译的方法

时间:2015-07-08 00:18:47

标签: java compiler-errors

我有一个系统,它接受一个类名并由soot枚举 - 它提供了详细信息,例如类中的所有方法,所述类的修饰符,可见性,方法的参数等等

我所做的就是获取该信息并构建一个java文件,我实例化该类(通过反射或常规实例化),调用该类的每个方法成员,然后编译它并在我们系统的其他地方使用它。我已经有98个我的测试用例了。失败的2%是作为方法的参数的对象是内部类(package.path.here.ClassName $ InnerClass作为变量类型)。

请注意:我不关心方法中的内容,我只关心枚举阶段的签名。

当我尝试编译一个具有参数包含cannot find symbol的方法成员的类时,我得到的编译器错误是package.path.here.ClassName$InnerClass

所以我的输入很简单package.path.here.ToEnumerate

package package.path.here;

public class ToEnumerate {
     public ToEnumerate() {
        //irrelevant code here
     }

     public void method1(some.other.package.OtherClass$InnerClass c, long a) {
        // irrelevant code here
     }

     public void method1(int x, long b) {
        // irrelevant code here
     }

     public void method1(yet.another.package.YetAnotherClass b, long a) {
         // irrelevant code here
     }

     public void method2(long b, boolean a) {
        // irrelevant code here
     }

     public int method3(int x) {
         // irrelevant code here
     }

}

通过我的系统,我将生成一个如下所示的Java文件:

package package.path.here;
// all necessary imports are auto generated
public class ToEnumerate_Main {
    public static void main(String[] args) {
        ToEnumerate inst = new ToEnumerate();
        Object obj = new Object();
        inst.method1((some.other.package.OtherClass$InnerClass) obj, (long) -1);
        inst.method1((int)-1, (long)-1);
        inst.method1((yet.another.package.YetAnotherClass) obj, (long) -1);
        inst.method2((long)-1, false);
        inst.method3((int)-1);
    }
}

当我使用:javac -cp /path/to/all/my/classes ToEnumerate_Main.java编译时,我得到了cannot find symbol对内部类的引用。胡萝卜指向最后一个包路径和类名之间的句点:

ToEnumerate_Main.java:7: error: cannot find symbol
inst.method1((some.other.package.OtherClass$InnerClass) obj, (long) -1);
                                ^
symbol:   class OtherClass$InnerClass
location: package some.other.package

即使我可以在该路径中找到该文件,该文件也包含在-cp的{​​{1}}参数中。

如果我更改ToEnumerate_Main以发送某些基于对象的变量javac,如果有人尝试发送nulls,我会得到reference to method1 is ambiguous,就像您希望的那样。

我不太确定为什么编译时会抛出null错误,因为我文件肯定存在。任何帮助,以确定抛出此错误的原因,cannot find symbol找不到该文件的原因,或获得此工作的方法将非常感激。

0 个答案:

没有答案