小编mar*_*ran的帖子

Lombok @Builder没有初始化集合

我正在使用龙目岛@Data@Builder这样的注释:

@Data
@Builder(toBuilder = true)
class Movie {

    // Some other fields here.

    private final List<Actor> actors;

}
Run Code Online (Sandbox Code Playgroud)

当我Movie使用构建器创建一个新的,而不指定任何actor时,我希望Lombok将我的List初始化为Collections.emptyList().但这不会发生:

List<Actor> actors = Movie.builder().build().getActors();
System.out.println(actors); // Prints 'null'.
Run Code Online (Sandbox Code Playgroud)

@Builder注释的文档中,在Vanilla Java(https://projectlombok.org/features/Builder.html)的代码示例中的第55和56行中,我应该看一下代码示例@Singular(https: //projectlombok.org/features/Singular-snippet.html).在这里的Vanilla Java示例的第112行,似乎应该将列表初始化为空列表.

我查了一下,如果我用@Singular以下内容对列表进行注释,确实会发生这种情况:

@Data
@Builder(toBuilder = true)
class Movie {

    // Some other fields here.

    @Singular
    private final List<Actor> actors;

}

List<Actor> actors = Movie.builder().build().getActors();
System.out.println(actors); // Prints '[]'.
Run Code Online (Sandbox Code Playgroud)

这是龙目岛的一个错误,还是我做错了什么?根据文档,似乎应该在两种情况下将列表初始化为空列表(因为@Builderdoc指的是@Singular …

java lombok

26
推荐指数
2
解决办法
1万
查看次数

什么可以用编译时常量(const val)表示?

编译时常量的文档列出了属性需要满足的三个要求,以便将其声明为const val.这些是:

  • 顶级或对象的成员
  • 使用String类型或基本类型初始化
  • 没有自定义的吸气剂

"没有自定义getter"的要求让我相信我不能在常量声明中使用任何函数,但似乎并非如此.这些编译:

const val bitmask = (5 shl 3) + 2
const val aComputedString = "Hello ${0x57.toChar()}orld${((1 shl 5) or 1).toChar()}"
const val comparedInt = 5.compareTo(6)
const val comparedString = "Hello".compareTo("World!")
const val toStringedInt = 5.compareTo(6).toString()
const val charFromString = "Hello World!".get(3)
Run Code Online (Sandbox Code Playgroud)

但是,这些不会编译:

// An extension function on Int.
const val coercedInt = 3.coerceIn(1..5)

// Using operator syntax to call the get-function.
const val charFromString = "Hello World!"[3]

// An immediate type is not …
Run Code Online (Sandbox Code Playgroud)

kotlin

19
推荐指数
1
解决办法
4245
查看次数

Kotlin:流与序列 - 为什么有多种方法来做同一件事?

为什么在 Kotlin 中有多种方法可以做同样的事情,这是有原因的吗?

val viaSequence = items.asSequence()
    .filter { it%2 == 0 }
    .map { it*2 }
    .toList()
println(viaSequence)

val viaIterable = items.asIterable()
    .filter { it%2 == 0 }
    .map { it*2 }
    .toList()
println(viaIterable)

val viaStream = items.stream()
    .filter { it%2 == 0 }
    .map { it*2 }
    .toList()
println(viaStream)
Run Code Online (Sandbox Code Playgroud)

我知道以下代码在每个步骤上都会创建一个列表,这会增加 GC 的负载,因此应该避免:

items.filter { it%2 == 0 }.map { it*2 }
Run Code Online (Sandbox Code Playgroud)

functional-programming sequence kotlin java-stream

12
推荐指数
2
解决办法
1万
查看次数

使用 Azure Functions 3.0 中的属性将枚举序列化为字符串

我尝试在 Azure Functions 3.0/3.1 应用程序中获取 HTTP 触发器以返回枚举的字符串表示,但没有任何运气。我已经尝试了 Core 3.0 和 Core 3.1。

鉴于这个类:

public enum TestEnum
{
   TestValue
}

public class TestClass
{ 
   public TestEnum Test { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望这个 HTTP 触发器:

[FunctionName("MyHttpTrigger")]
public static IActionResult Run(
   [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log)
{
    return new OkObjectResult(new TestClass { Test = TestEnum.TestValue });
}
Run Code Online (Sandbox Code Playgroud)

返回{ "test": "TestValue" }。相反,它返回{ "test": 0 }.

在 .Net Core 2 中,我可以使用[JsonConverter(typeof(StringEnumConverter))]命名空间装饰枚举Newtonsoft.Json来实现这一点。这现在不起作用。 …

c# asp.net-core azure-functions asp.net-core-3.0 asp.net-core-3.1

8
推荐指数
2
解决办法
1856
查看次数

如何将2个数组转换为地图

我有2个数组,一个用字符串作为键,另一个用整数作为值.我怎样才能将它们转换为地图?

val keys = arrayOf("butter", "milk", "apples")
val values = arrayOf(5, 10, 42)
val map: Map<String, Int> = ???
Run Code Online (Sandbox Code Playgroud)

编辑:我知道如何在Kotlin中将List转换为Map?,但它没有解决这个问题,因为我有2个列表.

kotlin

7
推荐指数
1
解决办法
2736
查看次数

为什么不使用GlobalScope.launch?

在这里Globalscope强烈建议不要使用。

我有一个简单的用例。对于我收到的每条kafka消息(比如说一个ID列表),我必须将其拆分并同时调用rest服务,等待它完成并继续执行其他同步任务。该应用程序中没有其他需要协程的东西。在这种情况下,我可以摆脱它吗?

注意:这不是android应用程序。它只是在服务器端运行的kafka流处理器。这是一个在Kubernetes中运行的临时性,无状态,容器化(Docker)应用程序(如果愿意的话,它支持Buzzword)

jvm-languages kotlin kotlinx.coroutines

7
推荐指数
3
解决办法
2200
查看次数

maven -D 是什么意思?

我看到里面有一些maven命令-D。例如:

mvn clean install -Duser=john -Dpw=122345
Run Code Online (Sandbox Code Playgroud)

我在互联网上找不到任何有关它的信息。有人可以向我展示一些关于其含义的官方文档吗?

maven

7
推荐指数
1
解决办法
6383
查看次数

如何禁用lambdas上缺少最终修饰符的checkstyle警告?

在Java 8中编写lambdas时,我得到了缺少最终修饰符的checkstyle警告.我在编写普通方法时需要警告,但在lambdas中却没有.

例如,将BigDecimals列表汇总如下:

values.stream().reduce(BigDecimal.ZERO, (a, b) -> a.add(b));
Run Code Online (Sandbox Code Playgroud)

给我以下checkstyle警告:

- Variable 'a' should be declared final.
- Variable 'b' should be declared final.
Run Code Online (Sandbox Code Playgroud)

有没有办法让Checkstyle在写lambdas时忽略它?

java lambda checkstyle

5
推荐指数
1
解决办法
473
查看次数

如何在kotlin中进行多循环for循环

在Java中:

for(int j = 0; j < 6 && j < ((int)abc[j] & 0xff); j++) { 
  // ...
}
Run Code Online (Sandbox Code Playgroud)

我们如何在Kotlin中制作这个循环?

kotlin

5
推荐指数
3
解决办法
762
查看次数

未绑定的通配符类型

当我得到时,我正在玩Scala REPL error: unbound wildcard type.我试图声明这个(无用的)函数:

def ignoreParam(n: _) = println("Ignored")
Run Code Online (Sandbox Code Playgroud)

为什么我收到此错误?

是否可以在不引入命名类型变量的情况下声明此函数?如果是这样,怎么样?

types scala existential-type unbounded-wildcard

4
推荐指数
1
解决办法
7612
查看次数