我有一个框架,并希望在用户关闭它时提示保存文档.但如果他们取消,框架不应该关闭.
frame.addWindowListener(new SaveOnCloseWindowListener(fileState));
...
public class SaveOnCloseWindowListener extends WindowAdapter {
private final FileState fileState;
public SaveOnCloseWindowListener(FileState fileState) {
this.fileState = fileState;
}
public void windowClosing(WindowEvent e) {
if (!fileState.onQuit())
cancelClose();
}
}
Run Code Online (Sandbox Code Playgroud)
FileState查看文档是否脏.如果不是它什么也不做,并返回true.如果它是脏的,它会询问用户是否要保存(是/否/取消).如果用户此时取消,则应该中止windowClosing.
我在网上看到的所有建议都涉及显式退出windowClosing方法,从而覆盖了JFrame.setDefaultCloseOperation()的使用,并重复了JFrame.processWindowEvent()中的代码.
我实际上有一个肮脏的解决方案,但想看看是否有更干净的解决方案.
干杯
我需要调用可能或不能及时返回结果的服务.我希望能够写作
val result = runWithTimeout(5000, valReturnedOnTimeout) { service.fetch }
Run Code Online (Sandbox Code Playgroud)
是否有一个标准函数可以完成这项工作 - 比如Ruby的超时?
如果我的Lambda Exception在消息中抛出,404则在API Gateway中看到的响应为
{
"errorMessage":"404",
"errorType":"java.lang.Exception",
"stackTrace":[..."]
}
Run Code Online (Sandbox Code Playgroud)
并且我可以在errorMessage上进行匹配以影响HTTP结果。
但是,如果我有效地返回相同的结果,即:
{
"errorMessage":"404",
"errorType":"Error"
}
Run Code Online (Sandbox Code Playgroud)
API网关似乎无法识别出错误,并且始终返回200。
我的精美功能代码有什么办法可以在不引发异常的情况下发出错误信号?
我正在为ScalaTest开发一个客户可读的DSL.目前我可以写
feature("Admin Login") {
scenario("Correct username and password") {
given("user visits", classOf[AdminHomePage])
then(classOf[SignInPage], "is displayed")
Run Code Online (Sandbox Code Playgroud)
但这会更好看
feature("Admin Login") {
scenario("Correct username and password") {
given("user visits", the[AdminHomePage])
then(the[SignInPage], "is displayed")
Run Code Online (Sandbox Code Playgroud)
有什么办法吗?
def the[T] =
Run Code Online (Sandbox Code Playgroud)
回来classOf[T]?
我有一个Java类,可以访问我想从Scala使用的事务上下文.所以我认为我会编写一个Java方法,它接受Scala函数并在事务中调用它 -
class Context {
@Transactional public void runInTx(Function0<scala.Unit> f) {
f.apply();
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.我希望能够将Scala闭包传递给它
def deleteItems(ids: Set[Long]) = {
context.runInTx { ids foreach { dao.delete(_) } }
}
Run Code Online (Sandbox Code Playgroud)
但不能因为runInTx实际上并ids foreach { dao.delete(_) }没有按名称来呼叫,实际上并不是一个Function0.
现在我可以通过一个小小的thunk来解决这个问题
def deleteItems(ids: Set[Long]) = {
def localApply(f: => Unit) = context.applyInTx(f _)
localApply { ids foreach { dao.delete(_) } }
}
Run Code Online (Sandbox Code Playgroud)
但在我看来,我需要一个lambda函数来生成一个未命名Function0的代码块.
API中是否存在这样的事情,或者我将如何编写它?
假设我有一个人员列表并希望拥有Map<String, Person>,其中String是人名.我应该怎么做kotlin?
我想捕获对模拟对象的调用
public interface Service {
public String stringify(Object o);
}
service = mockery.mock(Service.class);
mockery.allowing(service::stringify).with(42).will(() -> "42");
Run Code Online (Sandbox Code Playgroud)
所以里面allowing我有一个Function<Object, String>
是否有任何reflecto-magic可以让我从方法参考创建的函数中找到服务?
public WithClause allowing(Function<T,R> f) {
Object myServiceBackAgain = findTargetOf(function);
....
}
Run Code Online (Sandbox Code Playgroud)
我知道函数将始终来自这些方法引用,所以我很乐意尽可能地向下转换.
这与相关的问题不同是否可以将方法引用转换为MethodHandle?因为,一开始它不是同一个问题,只是在相关领域.即使我可以得到一个MethodHandle,我也无法从中获取目标.
如果我创建一个数组,然后填充它,Kotlin 认为数组中可能存在空值,并强制我考虑这一点
val strings = arrayOfNulls<String>(10000)
strings.fill("hello")
val upper = strings.map { it!!.toUpperCase() } // requires it!!
val lower = upper.map { it.toLowerCase() } // doesn't require !!
Run Code Online (Sandbox Code Playgroud)
创建填充数组就不存在这个问题
val strings = Array(10000, {"string"})
val upper = strings.map { it.toUpperCase() } // doesn't require !!
Run Code Online (Sandbox Code Playgroud)
如何告诉编译器结果strings.fill("hello")是一个 NonNull 数组?
AWS是否维护线程池并将并发的传入请求分派到同一Lambda实例,或者在这种情况下启动另一个实例?
我知道在某个负载系数下将启动另一个实例,但是我可以依靠Lambda内的单线程访问吗?
java ×6
scala ×3
aws-lambda ×2
java-8 ×2
kotlin ×2
awt ×1
closures ×1
collect ×1
concurrency ×1
dsl ×1
function ×1
java-stream ×1
lambda ×1
reflection ×1
sequence ×1
swing ×1