小编Dun*_*gor的帖子

如何实现Java 8接口但在Java 6上运行?

我有一个库,Fakir在你问的时候看到,我希望与Java 6保持兼容.同时,如果它的关键抽象Faker能够实现它将会非常好java.util.function.Supplier<T>.

我通过实施我自己的供应商副本来捏造东西,所以至少可以使用lambdas,但是不能运送两个不同的jar文件(啊Scala,我多么想念你的不同语言规范的多个版本)有没有办法我的密钥抽象向前兼容吗?

java java-8

9
推荐指数
1
解决办法
399
查看次数

Swing WindowListener如何否决JFrame关闭

我有一个框架,并希望在用户关闭它时提示保存文档.但如果他们取消,框架不应该关闭.

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()中的代码.

我实际上有一个肮脏的解决方案,但想看看是否有更干净的解决方案.

干杯

java swing awt

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

是否有标准的Scala函数用于运行具有超时的块?

我需要调用可能或不能及时返回结果的服务.我希望能够写作

val result = runWithTimeout(5000, valReturnedOnTimeout) { service.fetch }
Run Code Online (Sandbox Code Playgroud)

是否有一个标准函数可以完成这项工作 - 比如Ruby的超时

concurrency scala

8
推荐指数
2
解决办法
6850
查看次数

有没有什么办法可以在不抛出异常的情况下通知Java的AWS Lambda错误?

如果我的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。

我的精美功能代码有什么办法可以在不引发异常的情况下发出错误信号?

java amazon-web-services aws-lambda aws-api-gateway

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

在Scala中重命名classOf

我正在为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]

dsl scala

7
推荐指数
2
解决办法
369
查看次数

Scala中是否有lambda函数?

我有一个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中是否存在这样的事情,或者我将如何编写它?

lambda closures scala function

7
推荐指数
1
解决办法
2171
查看次数

Java 8 stream.collect(Collectors.toMap())模拟在kotlin中

假设我有一个人员列表并希望拥有Map<String, Person>,其中String是人名.我应该怎么做kotlin?

java sequence collect kotlin java-stream

7
推荐指数
1
解决办法
2219
查看次数

如何找到Java8方法引用的目标?

我想捕获对模拟对象的调用

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,我也无法从中获取目标.

java reflection java-8

6
推荐指数
1
解决办法
867
查看次数

我如何告诉 Kotlin 数组或集合不能包含空值?

如果我创建一个数组,然后填充它,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 数组?

kotlin

6
推荐指数
1
解决办法
2937
查看次数

是否会有2个线程同时访问我的Java AWS Lambda?

AWS是否维护线程池并将并发的传入请求分派到同一Lambda实例,或者在这种情况下启动另一个实例?

我知道在某个负载系数下将启动另一个实例,但是我可以依靠Lambda内的单线程访问吗?

java amazon-web-services aws-lambda

6
推荐指数
1
解决办法
107
查看次数