小编Gar*_*Bak的帖子

main是一个有效的Java标识符吗?

我的一个孩子正在高中学习Java,并在他的一个测试中得到了这个:

以下哪项是Java中的有效标识符?

一个. 123java
main
C. java1234
d. {abce
)whoot

他回答了b并弄错了.

我查看了这个问题并认为这main 一个有效的标识符,它应该是正确的.

我们看了一下标准的Java 规范,并强调了这一点.我们还编写了一个示例程序,其中包含一个名为变量的变量main,以及一个方法.他创建了一个书面反驳,包括Java文档参考,测试程序和老师忽略它,并说答案仍然是错误的.

main有效的标识符吗?

java program-entry-point identifier language-lawyer

285
推荐指数
12
解决办法
1万
查看次数

来自sourceSet的Gradle排除文件无效

我有一个项目,我试图将一个java源文件树中的单个文件包含到一个库项目中.无论我做什么,我都不能只包含那个文件.我在另一个项目中取得了成功,排除了除一个文件之外的所有文件,但只有在从库项目运行gradle时才有效.从应用程序目录运行时,包含所有文件.在尝试创建一个复制问题的简单项目时,同样排除所有问题也不起作用.

示例文件树很简单:

application - android app that includes the two libraries
library1/
  build.gradle
  src/main/AndroidManifest.xml
library2/
  build.gradle
  src/main/AndroidManifest.xml
java/src/com/company/product/
  /pkg1
    Source1.java, Source2.java, Source3.java
    libraryoneonly/Library1Source.java
  /pkg2
    Source1.java, Source2.java, Source3.java
Run Code Online (Sandbox Code Playgroud)

library1 build.gradle看起来像这样.下面的工作既不包括也不包括在内.

LIBRARY1 /的build.gradle

apply plugin: 'com.android.library'
android {
    sourceSets {
        main.jni.srcDirs = []
        main.jniLibs.srcDir 'src/main/libs'
        main.java {
            srcDir "../../java/src"
            exclude  {  FileTreeElement elem ->
                println "Searching for files, found: " + elem.relativePath
                !(elem.isDirectory() || elem.name.equals('Library1Source.java'))
            }
            //include ("**/libraryoneonly/**")
            //include ('com/company/product/pkg1/libraryoneonly/Library1Source.java')
        }
    }
dependencies {
    compile project(':library2')
}
Run Code Online (Sandbox Code Playgroud)

和library2 build.gradle.令人惊讶的是,下面的未注释排除确实有效.

library2 /的build.gradle

apply …
Run Code Online (Sandbox Code Playgroud)

android gradle android-gradle-plugin

16
推荐指数
2
解决办法
6055
查看次数

两个外部第三方混淆库中存在重复的类名

我有一个项目,其中包括两个外部第三方库。当尝试构建项目时,这两个库的类文件名都被混淆了,并且 gradle barfs 了。

Duplicate class a.a.a.a.a.b found in modules...
Run Code Online (Sandbox Code Playgroud)

我无法排除任何类,因为它们不是重复的,我也没有看到 gradle 为名称添加前缀的方法。

有什么简单的解决办法吗?

android gradle

8
推荐指数
1
解决办法
2077
查看次数

切换 webview 后 findElement 不起作用

我有一个简单的 Android 浓缩咖啡测试,在切换 Activity 之前它可以正常工作。该测试通过登录运行,按类从 Web 视图中选择元素,然后在成功登录后,活动切换。一旦进入新的 Activity,我无法在新的 Web 视图中找到任何内容,无论是通过类、CSS 选择器还是通过 x_path。

我知道它隐藏在 html 中,我可以看到它并在 chrome insepctor 中搜索它:

<div _ngcontent-c9="" class="tile-title" title="Pay">Pay </div>
Run Code Online (Sandbox Code Playgroud)

但我无法用这个 CSS_SELECTOR 找到它:

onWebView(allOf<View>(isDisplayed(), isJavascriptEnabled()))
                    .withElement(findElement(Locator.CSS_SELECTOR, "div[title=Pay]"))
Run Code Online (Sandbox Code Playgroud)

同样,我也尝试过使用 X_PATH 字符串,甚至使用类名(不是唯一的),但它仍然失败。

我们确实创建了多个 Web 视图,但只有一个可见。

我该怎么做才能更清楚地了解这一点并找出为什么我无法选择有问题的 div?

更新

看来我在日志中遗漏了一些内容,这些内容揭示了我的部分问题。AmbiguousViewMatcherException我在日志中看到了一个。

查看代码,我们有一个具有名称的 FrameLayout web_container,并通过调用将 3 个 webview 附加到该视图addView()。所以这个组件最终有 3 个子组件。

我更改了测试以使用withParent()isDisplayed()匹配网络视图。该调用之前曾引发异常,但现在已通过。

onWebView(allOf(withParent(withId(R.id.web_container)), isDisplayed())).forceJavascriptEnabled()
Run Code Online (Sandbox Code Playgroud)

鉴于此成功,我仍然无法在该 webview 中找到任何内容,这里是修改后的 onWebVeiw 语句:

onWebView(allOf(withParent(withId(R.id.web_container)), isDisplayed())).forceJavascriptEnabled()

 Log.d("FeatureTest", "passed forceJavaScriptEnabled()")    
onWebView(allOf(withParent(withId(R.id.web_container)), isDisplayed()))
                        .withElement(findElement(Locator.CSS_SELECTOR, "div[title=Pay]")).perform(webClick())
Run Code Online (Sandbox Code Playgroud)

我在日志中看到的错误:

09-21 09:19:19.490  9481  9529 …
Run Code Online (Sandbox Code Playgroud)

android android-espresso

5
推荐指数
1
解决办法
1634
查看次数

Ormlite ObjectCache返回旧数据

我在Android上使用Ormlite并启用了ObjectCache,在使用UpdateBuilder和ColumnExpression更新表后,我恢复了旧数据.我已经阅读了文档,并没有警告不要在启用缓存的情况下使用UpdateBuilder.

设置表最多只能有1-5行.updateColumnExpression似乎是一种简单的方法,只允许其中一行为true.

这是预期的行为吗?

public void setActiveSetting(String id)
{
    try {
        UpdateBuilder<Settings, Integer> updateBuilder2 = getHelper().getSettingsDao().updateBuilder();
        updateBuilder2.updateColumnExpression("active", "id = " + id );
        updateBuilder2.update();
    } catch (SQLException e){
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是返回过时数据的调用:

public List<Settings> getSettings() 
{
    List<Settings> settings = null;
    try  {
        settings = getHelper().getSettingsDao().queryForAll();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return settings;
}
Run Code Online (Sandbox Code Playgroud)

并设置DAO:

public Dao<Settings, Integer> getSettingsDao() 
{
    if (null == settingsDao) {
        try {
            settingsDao = getDao(Settings.class);
            settingsDao.setObjectCache(true);
        } catch (java.sql.SQLException e) {
            e.printStackTrace();
        }
    }
    return …
Run Code Online (Sandbox Code Playgroud)

android ormlite

2
推荐指数
1
解决办法
917
查看次数

使用ORMlite OR子句的异常

我有一段时间试图在ORMLite中使用'或'子句,我得到以下例外:

Caused by: java.lang.IllegalStateException: Expecting there to be a clause already defined for 'OR' operation
            at com.j256.ormlite.stmt.Where.pop(Where.java:702)
            at com.j256.ormlite.stmt.Where.or(Where.java:381)
Run Code Online (Sandbox Code Playgroud)

我已搜索周围RTFM,但我不能完全明白我在做什么错.我查看了抛出异常的行,看起来堆栈是空的,当它期待某些东西存在时.

我尝试过更改一下查询,以下三个示例如下:

List<Contacts> list = new ArrayList<Contacts>();

Dao<Contacts,Integer> dao = DatabaseManager.getInstance().getDaoForClass(Contacts.class);
final QueryBuilder<Contacts, Integer> queryBuilder = dao.queryBuilder();

nameFilter = "%" + nameFilter + "%";
// Tried this way:
queryBuilder.where().or(queryBuilder.where().like(Contacts.FIELD_NAME_FIRST_NAME, nameFilter),
                        queryBuilder.where().like(Contacts.FIELD_NAME_LAST_NAME, nameFilter),
                        queryBuilder.where().like(Contacts.FIELD_NAME_PHONE_NUMBER, nameFilter));

// And then this way:
queryBuilder.where().like(Contacts.FIELD_NAME_FIRST_NAME, nameFilter);
queryBuilder.where().or();
queryBuilder.where().like(Contacts.FIELD_NAME_LAST_NAME, nameFilter);
queryBuilder.where().or();
queryBuilder.where().like(Contacts.FIELD_NAME_PHONE_NUMBER, nameFilter);

// And this way
queryBuilder.where().like(Contacts.FIELD_NAME_FIRST_NAME, nameFilter);
queryBuilder.where().like(Contacts.FIELD_NAME_LAST_NAME, nameFilter);
queryBuilder.where().like(Contacts.FIELD_NAME_PHONE_NUMBER, nameFilter); …
Run Code Online (Sandbox Code Playgroud)

android ormlite

1
推荐指数
2
解决办法
1127
查看次数