有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法编译Guava 23的SimpleTimeLimiter示例

我正在遵循我在网上多次看到的代码组合,including examples here on SO,等等。但它不会为我编译

import com.google.common.util.concurrent.SimpleTimeLimiter;

import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;

public class TimeLimit
{
    public static void main(String[] args)
    {
        SimpleTimeLimiter limiter = new SimpleTimeLimiter();
        String result = limiter.callWithTimeout(new Callable<String>()
        {
            public String call()
            {
                return longTimeExecutingMethod();
            }
        }, 3, TimeUnit.SECONDS, false);
    }

    public static String longTimeExecutingMethod()
    {
        return "long time executing method";
    }
}

我得到的错误是:

Error:(10, 45) java: constructor SimpleTimeLimiter in class com.google.common.util.concurrent.SimpleTimeLimiter cannot be applied to given types;
  required: java.util.concurrent.ExecutorService
  found: no arguments
  reason: actual and formal argument lists differ in length

以及:

Error:(11, 40) java: method callWithTimeout in class com.google.common.util.concurrent.SimpleTimeLimiter cannot be applied to given types;
  required: java.util.concurrent.Callable<T>,long,java.util.concurrent.TimeUnit
  found: <anonymous java.util.concurrent.Callable<java.lang.String>>,int,java.util.concurrent.TimeUnit,boolean
  reason: cannot infer type-variable(s) T
    (actual and formal argument lists differ in length)

对于第一个错误,我尝试创建一个单线程执行器:

SimpleTimeLimiter limiter = new SimpleTimeLimiter(Executors.newSingleThreadExecutor());

但这只会导致更改第一个编译器错误:

Error:(10, 45) java: SimpleTimeLimiter(java.util.concurrent.ExecutorService) has private access in com.google.common.util.concurrent.SimpleTimeLimiter

共 (1) 个答案

  1. # 1 楼答案

    使用static factory method

    SimpleTimeLimiter limiter = SimpleTimeLimiter.create(executor);