当前位置: 首页 > 知识库问答 >
问题:

lambda表达式"List.of (() -> "read")"是什么意思?[复制]

洪子晋
2023-03-14

这是一种方法:

   @Override 
   public Collection<? extends GrantedAuthority> getAuthorities() { 
      return List.of(() -> "read"); 
   }

我对lambda表达式的理解很差,“expression”部分必须返回一个值,在这种情况下,它必须是字符串

So<代码>()-

既然如此,为什么要用lambda表达式呢?

为什么不直接列出。“已读”?

共有3个答案

司马狐若
2023-03-14

GrantedAuthority是Spring Security Core的一个功能接口,用于表示用户的权限。

术语函数接口表示只有一个抽象方法-getAuthority(),该签名不会与对象类定义的方法冲突。

由于GrantedAuthority是一个函数接口,因此可以使用lambda表达式或方法引用来实现它。

而实现接口实际上意味着提供其抽象行为的实现。

/code具有以下定义:

java.lang.String getAuthority()

因此,表示授权的对象应该能够通过提供字符串(本身不应该是字符串)来响应方法调用。

这就是lambda所做的:

GrantedAuthority authority = () -> "read";

它创建了一个类型为Grant的对象,当对其调用方法getAuthor()时,该对象能够使用字符串进行响应。

方法返回的结果必须是授予权限对象的集合(扩展授予权限表示授予权限的子类型,即其任何实现)而不是字符串的集合。

有关lambda表达式的详细信息,请参阅Oracle提供的本教程

翟淮晨
2023-03-14

这就是区别:

<代码>()-

  1. 给自己弄点面粉
  2. 加入一撮盐和一勺油。
  3. 把它和水混合,然后揉捏。
  4. 把它扔进烤箱。

这相当于你可以吃的真正的面包。

一个是制作东西的配方,一个是东西。在这种情况下,食谱真的非常愚蠢。这有点像一杯水和一份水的配方之间的区别(这只是:打开水龙头,一个内衬),可能有点难以看出区别,但不要说这里的配方有多简单——想想配方和实际食物之间的区别。

至关重要的是,如果任务是给你一块蛋糕,那一定有蛋糕。这很复杂,我需要去一家商店,它需要保持凉爽,这里正好有一个。我不能神奇地复制蛋糕。

与蛋糕配方相比,蛋糕配方可以有0个,运输配方很便宜,它们不需要冷藏,也不会过期。我们也可以根据需要制作尽可能多的蛋糕。包括0,如果我们不想做一个的话。

同样,这个“配方”的极端简单性使得这种区别很难“看到”:在堆中拥有一个字符串文字并不昂贵,它们也不难维护。在许多方面,它实际上比配方更简单。尽管如此,原则是这样的:Granted授权的这种特殊实现是微不足道的,而使用配方的繁琐程序似乎很愚蠢。但也许GrantedAuth有不同的实现,它会检查一些身份验证服务器,甚至可能要求用户输入密码。

这种交易意味着你非常想返回一个配方,而不是实际的权限:授权需要在必要时进行检查(现在还没有),如果我们一开始根本不需要密码,就不要要求密码。

正如您所说,()-

罗安和
2023-03-14

GrantedAuthority是功能对象接口,而不是字符串。

它有一个返回String的方法getAuthor()

您需要列表中的某些内容,以便在以后调用时返回字符串,而不是现在的字符串。

您的代码等效于

 return List.of(new GrantedAuthority() {
            String getAuthority() {
                return "read";
            }
        });
 类似资料:
  • 问题内容: 我在以下正则表达式中找到了它: 它将方括号(及其内容)与嵌套方括号匹配。 问题答案: 是一个字符类,表示除和以外的所有字符。 您可以避免转义和特殊字符,因为它对于PCRE(函数中使用的正则表达式引擎)不是模棱两可的。 由于在PCRE中不正确,因此正则表达式解析的唯一方法是在字符类内部,该字符类稍后将关闭。与以下相同。它不能重新打开字符类内的字符类(POSIX字符类除外)。然后最后一个清

  • 我正在试图理解是什么意思。即使我将其删除,该表达式的工作原理也是一样的,即: 我知道我可以用引用匹配的模式。是什么?

  • 问题内容: 我对以下python表达式很感兴趣: 任务是将2个字典合并为第三个字典,以上表达式可以很好地完成任务。我对运算符及其对表达式的作用很感兴趣。我以为是幂运算符,并且尚未在上面的上下文中看到它。 完整的代码段是这样的: 问题答案: 参数列表中的in有特殊含义,如本教程的4.7节所述。随其传递的字典(或类似字典的)对象被扩展为可调用对象的关键字参数,就像被扩展为单独的位置参数一样。

  • 和?我试着在谷歌上搜索,但没有成功。

  • 问题内容: Java表达式中的双引号是什么意思? 我有: 有人可以解释这些表达式的计算方式,最后一个的目的是什么? 问题答案: 里面的任何东西都会变成。和+ =。例如 你会得到 在你的问题上 将被评估为: