在Java 9中,是否允许使用循环模块?如果不是,原因是什么?
module com.foo.bar {
requires com.foo.baz;
exports com.foo.bar.fizz;
}
module com.foo.baz {
requires com.foo.bar;
exports com.foo.baz.buzz;
}
Run Code Online (Sandbox Code Playgroud) java java-platform-module-system java-9 java-module module-info
我正在进行Android原生应用程序的自动化,并希望通过文本验证登录验证.当我尝试使用Appium检查器和Uiautomator选择它时.两者都无法找到验证部分,因此很难选择它.
我尝试了来自不同论坛和Appium讨论的代码,但仍然无法通过自动化找到验证.我尝试过以下方法:
代码1
JavascriptExecutor js = (JavascriptExecutor)driver;
WebElement field = driver.findElement(By.xpath("//android.widget.EditText[@text='Enter mobile number']"));
// Boolean is_valid = (Boolean)js.executeScript("return arguments[0].checkValidity();", field);
try {
String message = (String) js.executeScript("return arguments[0].validationMessage;", field);
} catch (Exception E) {
Run Code Online (Sandbox Code Playgroud)
输出:
例外:org.openqa.selenium.WebDriverException:方法尚未实现
代码2
public boolean IsValidationFired() {
if(driver.getPageSource().contains("Invalid")) {
System.out.println("PASS");
} else {
System.out.println("FAIL");
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
打印=失败
我不确定它是javascript弹出窗口还是本机应用程序弹出窗口或Toast message.But要检查它并通过自动化验证.
更新
用于启动验证的代码是: contactnu.setError("Invalid phone number.");
假设我们在集合中有一些项目,我们想要使用某个比较器对它们进行排序,期望列表中的结果:
Collection<Item> items = ...;
Comparator<Item> itemComparator = ...;
Run Code Online (Sandbox Code Playgroud)
其中一种方法是对列表中的项进行排序,例如:
List<Item> sortedItems = new ArrayList<>(items);
Collections.sort(sortedItems, itemComparator);
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用排序流:
List<Item> sortedItems = items
.stream()
.sorted(itemComparator)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
我想知道,哪种方法更有效率?排序流是否有任何优点(如多核上的紧固排序)?
从运行时复杂性/速度的角度来看,效率很高.
我不相信自己能够实现一个完美的基准,学习SortedOps并没有真正启发我.
因为我使用的是 Java 14 和 15 预览功能。试图在java中找到字符串插值。
我找到的最接近的答案是
String.format("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4)
由于我从很多参考资料中得到的答案是 4,5 年前提出的旧答案。java 11,12,13,14,15 中的字符串插值是否有任何更新,相当于 C#
string name = "Horace";
int age = 34;
Console.WriteLine($"Your name is {name} and your age {age}");
Run Code Online (Sandbox Code Playgroud) 我正在使用Jsoup来提取网页的URL.在href这些URL的属性是相对的,如:
<a href="/text">example</a>
Run Code Online (Sandbox Code Playgroud)
这是我的尝试:
Document document = Jsoup.connect(url).get();
Elements results = document.select("div.results");
Elements dls = results.select("dl");
for (Element dl : dls) {
String url = dl.select("a").attr("href");
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但如果我使用
String url = dl.select("a").attr("abs:href");
Run Code Online (Sandbox Code Playgroud)
获得绝对URL http://example.com/text,它不起作用.我如何获得绝对URL?
给定一个具有属性的项目列表,我试图让最后一个项目显示所述属性的最大值.
例如,对于以下对象列表:
t i
A: 3
D: 7 *
F: 4
C: 5
X: 7 *
M: 6
Run Code Online (Sandbox Code Playgroud)
我可以得到最高的东西之一i:
Thing t = items.stream()
.max(Comparator.comparingLong(Thing::getI))
.orElse(null);
Run Code Online (Sandbox Code Playgroud)
但是,这会得到我Thing t = D.是否有一种干净而优雅的方式来获取最后一项,即X在这种情况下?
一种可能的解决方案是使用该reduce功能.但是,该属性是动态计算的,它看起来更像是:
Thing t = items.stream()
.reduce((left, right) -> {
long leftValue = valueFunction.apply(left);
long rightValue = valueFunction.apply(right);
return leftValue > rightValue ? left : right;
})
.orElse(null);
Run Code Online (Sandbox Code Playgroud)
在valueFunction现在需要将近一倍,而调用.
其他明显的迂回解决方案是:
我想要实现的实际上是浏览器的取消按钮,但使用JavaFX的webview.这是我到目前为止的代码:
Worker<Void> loadWorker = webView.getEngine().getLoadWorker();
if (loadWorker != null) {
Platform.runLater(() -> loadWorker.cancel());
}
Run Code Online (Sandbox Code Playgroud)
但它有时会起作用,有时却不起作用.
取消加载页面的webview/webengine任务的正确方法是什么?
是否stream.spliterator()隐式关闭stream,或者之后是否需要明确关闭它?
Stream<String> stream = Stream.of("a", "b", "c");
Spliterator<T> spliterator = stream.spliterator();
// Some low lever operation with the spliterator
stream.close(); // do we need to close?
Run Code Online (Sandbox Code Playgroud)
乍一看,似乎该.spliterator()方法关闭了stream,但没有调用stream.close().至少如果我在.spliterator()调用方法后立即将其关闭,似乎不会影响分裂器操作.
Stream<String> stream = Stream.of("a", "b", "c").limit(2);
Spliterator<T> spliterator = stream.spliterator();
stream.close();
// Some low lever operation with the spliterator
Run Code Online (Sandbox Code Playgroud)
这个问题可以扩展到其他stream方法,例如,.findAny().
stream.findAny() // Can I assume that I don't need to close the stream?
stream.onClose(() -> System.out.println("hi!")).findAny()`
// …Run Code Online (Sandbox Code Playgroud) 我愿意将参数传递给jshell脚本.例如,我会喜欢这样的事情:
jshell myscript.jsh "some text"
Run Code Online (Sandbox Code Playgroud)
然后在脚本中的某个变量中提供字符串"some text".
但是,jshell只需要一个文件列表,因此答案是:
File 'some text' for 'jshell' is not found.
Run Code Online (Sandbox Code Playgroud)
有没有办法将参数正确传递给jshell脚本?
到目前为止,我唯一的解决方案是在调用脚本时使用环境变量:
ARG="some test" jshell myscript.jsh
Run Code Online (Sandbox Code Playgroud)
然后我可以在脚本中访问它:
System.getenv().get("ARG")
Run Code Online (Sandbox Code Playgroud) 我将Java 8中的maven项目迁移到Java 9项目而没有任何构建工具Eclipse OxyGen 1a.
所以我的module-info.java看起来像这样:
但java.xml.bind不可访问,虽然它在我的模块路径中:
那么这里有什么问题?
java ×9
java-8 ×3
java-9 ×3
java-stream ×3
java-module ×2
android ×1
appium ×1
arraylist ×1
eclipse ×1
java-15 ×1
java-platform-module-system ×1
javafx ×1
jshell ×1
jsoup ×1
module-info ×1
spliterator ×1
string ×1
url ×1
validation ×1
webview ×1