Java:如何为lambda类匿名设置字段

Java:如何为lambda类匿名设置字段,java,ruby,lambda,webserver,Java,Ruby,Lambda,Webserver,在ruby中,我可以通过以下代码获取请求和参数: require 'sinatra/base' require 'faraday' class App < Sinatra::Base end Thread.new do App.get("/") do puts "request:#{request} ---- #{File.basename __FILE__}:#{__LINE__}" puts "params:#{params} ---- #{File.basen

在ruby中,我可以通过以下代码获取请求和参数:

require 'sinatra/base'
require 'faraday'

class App < Sinatra::Base
end

Thread.new do
  App.get("/") do
    puts "request:#{request} ---- #{File.basename __FILE__}:#{__LINE__}"
    puts "params:#{params} ---- #{File.basename __FILE__}:#{__LINE__}"
  end
  App.run!(port: 23333)
end

http = Faraday.new

loop do
  begin
    http.get("http://localhost:23333")
    break
  rescue Exception => e
    puts e
  end
  sleep 1
end

# request:#<Sinatra::Request:0x28045e4> ---- ex.rb:9
# params:{} ---- ex.rb:10
package ro.idea.ex;

public class App {
    public interface Lamb {
        void call();
    }

    public void get(String url, Lamb l) {
        // dynamic set
        l.setField("request", "default request");
        l.setField("params", "default params");
    }

    public static void main(String[] args) {
        new App().get("/", () -> {
            System.out.println(request + "\t\t" + new Exception().getStackTrace()[0].getFileName() + ":" + new Exception().getStackTrace()[0].getLineNumber());
        });
    }
}
但我想实现如下代码:

require 'sinatra/base'
require 'faraday'

class App < Sinatra::Base
end

Thread.new do
  App.get("/") do
    puts "request:#{request} ---- #{File.basename __FILE__}:#{__LINE__}"
    puts "params:#{params} ---- #{File.basename __FILE__}:#{__LINE__}"
  end
  App.run!(port: 23333)
end

http = Faraday.new

loop do
  begin
    http.get("http://localhost:23333")
    break
  rescue Exception => e
    puts e
  end
  sleep 1
end

# request:#<Sinatra::Request:0x28045e4> ---- ex.rb:9
# params:{} ---- ex.rb:10
package ro.idea.ex;

public class App {
    public interface Lamb {
        void call();
    }

    public void get(String url, Lamb l) {
        // dynamic set
        l.setField("request", "default request");
        l.setField("params", "default params");
    }

    public static void main(String[] args) {
        new App().get("/", () -> {
            System.out.println(request + "\t\t" + new Exception().getStackTrace()[0].getFileName() + ":" + new Exception().getStackTrace()[0].getLineNumber());
        });
    }
}

所以我的问题是:如何实现“设置域”?

首先,
setField
必须是
Lamb
接口的一部分。我的问题是如何实现“setField”内容。@MatheusMoreira,我知道你说的,我可以在Lamb接口中添加设置域,但我认为java的Lambda接口只有一种方法,如果我在这个接口中添加sefField,它将引发“multi-xxx”(我忘记了)错误。