代码之家  ›  专栏  ›  技术社区  ›  philgiese

Java如何为方法生成签名?

  •  0
  • philgiese  · 技术社区  · 14 年前

    我有一个带有静态final方法getAll的Java类:

    public static final Vector<Category> getAll(Context context, ContentValues where) {
        ArrayList<Integer> IDs = null;
    
        if(where != null && where.containsKey(DatabaseAdapter.KEY_PRODUCT)) {
            IDs = OvertureItem.getAll(context, DatabaseAdapter.TABLE_PRODUCT_CATEGORY, new String[] { DatabaseAdapter.KEY_CATEGORY }, where);
        } else {
            IDs = OvertureItem.getAll(context, DatabaseAdapter.TABLE_CATEGORIES, where);
        }
    
        Vector<Category> categories = new Vector<Category>();
    
        for(Integer id: IDs) {
            categories.add(Category.get(context, id));
        }
    
        return categories;        
    }
    

    现在我想把null作为where statemant的一个值,以便稍后在代码中忽略它。无论如何,在这个方法的测试用例中,我有:

    Vector<Category> categories = Category.getAll(context, null);
    

    这反过来又给了我一个 NoSuchMethodError错误 . 我不知道它为什么这么做。我唯一能想到的是,我提交的null与上述方法的签名不匹配。但我怎样才能克服呢?我已经想过超载了。但这只会导致重写大部分代码。至少当我这么做的时候,我是怎么想的。

    有什么建议吗?

    菲尔

    另外,这是我得到的堆栈跟踪:

    java.lang.NoSuchMethodError: com.sap.catalogue.model.Category.getAll
    at com.sap.overture.test.model.CategoryTest.testGetAll(CategoryTest.java:59)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
    at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
    at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430)
    at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   matt b    14 年前

    如果方法在编译时不存在,那么代码就不会编译。

    NoSuchMethodError 在运行时,这表明 Category 类别 您正在编译所针对的类。

        2
  •  0
  •   philgiese    14 年前

    真正的答案

    NoSuchMethodError错误 . 所以我再深入一点,然后突然想到:“我更改了android应用程序的包名”。我认为只要我在测试项目中保持正确的属性,这不会对测试项目产生任何影响AndroidManifest.xml文件但我错了!

    实际上,当你的应用程序包被命名为com.foo.bar网站.app,测试包必须命名为 NoSuchMethodError错误 . 在我手动删除bin/文件夹之后,我得到了一大堆错误。然后我重新命名了包含测试用例的包,并对项目进行了完全的清理/重建,然后一切又恢复正常。

    谢谢你的提示!我真的很感激你的帮助,你让我一直深入问题的根源。希望这能对以后有同样问题的人有所帮助。