当前位置: 首页 > 面试题库 >

等价于Java中的C#匿名方法?

桂梓
2023-03-14
问题内容

在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的较旧版本(它没有泛型)。


问题答案:

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();
      }
   });

Java 8及更高版本:

Java
8
在该语言中添加了lambda表达式。

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


 类似资料:
  • 我是一名普通的C#开发人员,但偶尔会用Java开发应用程序。我想知道是否有与C#async/await相当的Java?简单地说,java等价物是什么:

  • 问题内容: 在C#中,您可以执行以下操作: 是否有与此等效的Java? 问题答案: Java没有通过关键字向C#提供类型推断,因此尽管您可以创建匿名类型,但由于无法获取其属性,它们的效果不是很好。 因此,您可以像这样创建一个匿名类的实例: 但是由于是您无法在代码中访问的实例,并且已经创建了 匿名 类的实例,因此根据定义,没有办法显式引用该类。 在C#中,可以通过推断类型来解决此问题,但是在Java

  • 问题内容: 我编写了以下.NET Framework 3.5 C#方法,该方法获取XML文档的位置和X509数字证书(带有私钥)的对象表示形式,并将XML文档作为嵌入了XML签名(XMLDsig)的对象返回作为根的第一个子元素。 事实是,我迫切需要能够使用Java SE 6执行完全相同的过程,但是我很久没有写过任何Java了,也不知道从哪里开始。 谁能在Java代码中提供产生 完全相同的 XML输

  • 问题内容: 在Java中最接近std :: vector的东西是什么?我的意思是,一个可以将T放入其构造函数中,然后将pushBack和popBack()接收到的类,该类存储在连续内存中(而不是链表)。 谢谢 问题答案: ArrayList 一切都内部存储在数组(“连续内存”)中,尽管操作名称略有不同。 有关Java中的列表实现 和泛型的更多信息 编辑 Helper Method 在他的回答中也提

  • 问题内容: 我最近开始使用C#,并且我想找到与此等效的方法。我不知道这叫什么,所以我将简单地通过代码向您展示。 使用Java,我能够创建如下接口: 并像下面这样在方法的参数中传递此接口: 编辑 :我的问题是关于类中的方法的,如果使用C#可以执行这样的操作。 我想知道是否有一种方法可以使用C#(在方法中实例化接口)执行类似的操作,以及这实际上是什么。谢谢! 问题答案: 哇…好吧,请允许我概括一下:

  • 问题内容: Java的运算符等效于什么(在C#中)? (为澄清起见,我不是指and 运算符。) 问题答案: 在C#中,可以使用无符号整数类型,然后使用和执行您期望的操作。有关移位运算符的MSDN文档为您提供了详细信息。 由于Java不支持无符号整数(除之外),因此需要此附加运算符。