在C#中,你可以匿名定义委托(即使它们只不过是语法糖以上)。例如,我可以做到这一点:

public string DoSomething(Func<string, string> someDelegate)
{
     // Do something involving someDelegate(string s)
} 

DoSomething(delegate(string s){ return s += "asd"; });
DoSomething(delegate(string s){ return s.Reverse(); });

是否有可能通过这样的代码在Java中?我使用的处理框架,其中有一个很老的Java版本(它没有仿制药)。

有帮助吗?

解决方案

<强>预爪哇8:

最接近的Java有向代表是单一的方法接口。你可以使用匿名内部类。

interface StringFunc {
   String func(String s);
}

void doSomething(StringFunc funk) {
   System.out.println(funk.func("whatever"));
}

doSomething(new StringFunc() {
      public String func(String s) {
           return s + "asd";
      }
   });


doSomething(new StringFunc() {
      public String func(String s) {
           return new StringBuffer(s).reverse().toString();
      }
   });

<强>爪哇8及以上:

爪哇8 添加lambda表达式的语言。

    doSomething((t) -> t + "asd");
    doSomething((t) -> new StringBuilder(t).reverse().toString());

其他提示

不完全是这样的,但是Java有类似的东西。

这就是所谓的匿名内部类。

让我给你举一个例子:

DoSomething(new Runnable() {
   public void run() {
       // "delegate" body
   }
});

这是一个小更详细的,并且需要一个接口来实现, 但比这几乎是同样的事情其他

您示例是这样的在Java中,使用匿名内部类:

interface Func {
    String execute(String s);
}

public String doSomething(Func someDelegate) {
    // Do something involving someDelegate.execute(String s)
}

doSomething(new Func() { public String execute(String s) { return s + "asd"; } });
doSomething(new Func() { public String execute(String s) { return new StringBuilder(s).reverse().toString(); } } });
  

是否有可能通过这样的代码   在Java中?我使用的处理   框架,其中有一个很老   Java版本的(它没有   泛型)。

由于议题询问关于特定处理应答,没有直接等效。但处理使用Java语言1.4的水平,和Java 1.1引入匿名内部类,这是一个粗略的近似。

例如:

public class Delegate
{
    interface Func
    {
        void execute(String s);
    }

    public static void doSomething(Func someDelegate) {
        someDelegate.execute("123");
    }

    public static void main(String [] args)
    {

        Func someFuncImplementation = new Func() 
        {
            @Override
            public void execute(String s) {
                System.out.println("Bla Bla :"  + s);
            }
        };

        Func someOtherFuncImplementation = new Func() 
        {
            @Override
            public void execute(String s) {
                System.out.println("Foo Bar:"  + s);
            }
        };


        doSomething(someFuncImplementation);
        doSomething(someOtherFuncImplementation);
    }
}

输出:

  

血乳酸血乳酸:123

     

富酒吧:123

您已经都在这里忘记了一个C#代表首先 - 是线程安全即可。 这些示例仅仅用于单个线程应用..

大多数当代应用的写在多线程概念.. 因此,没有一个答案是答案。

有没有在Java中的等效

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top