情况:
我有一个带有lateinit字段的类,因此它们不在构造函数中:
class ConfirmRequest() {
lateinit var playerId: String
}
Run Code Online (Sandbox Code Playgroud)
我想要一个toString()包含所有字段的方法,并且不想手动编写,以避免锅炉打印.在Java中,我会使用Lombok @ToString注释来解决这个问题.
题:
有没有办法在Kotlin中实现它?
在文档中,据说您可以if-else多次使用或者switch-case:
int condition;
setCondition(int condition) {
this.condition = condition;
}
Run Code Online (Sandbox Code Playgroud)
交换机箱
switch (condition) {
case 1: print("one"); break;
case 2: print("two"); break;
Run Code Online (Sandbox Code Playgroud)
要么
if (condition == 1) { print("one"); }
else if (condition == 2) { print("two"); }
Run Code Online (Sandbox Code Playgroud)
接下来,condition声明volatile并setCondition()从多个线程调用方法.
If-else不是原子和volatile变量write是同步动作.因此,"one"和"two"字符串都可以在最后一个代码中打印出来.
如果使用了一些具有初始值的方法局部变量,则可以避免:
int localCondition = condition;
if (local condition == ..) ..
Run Code Online (Sandbox Code Playgroud)
switch-case操作员是否持有一些变量的初始副本?如何用它实现交叉线程操作?
java multithreading if-statement switch-statement conditional-statements
我正在试验HTTP/2客户jdk 9-ea+171.代码取自此示例:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://www.google.com/"))
.build();
HttpResponse<String> response
= client.send(request, HttpResponse.BodyHandler.asString());
Run Code Online (Sandbox Code Playgroud)
但客户端永远挂在最后一行.请指教如何解决?
调试显示它在方法中无限等待waitUntilPrefaceSent().
我有一些 jUnit4 测试类,我想使用注释中传递的不同参数运行多次。例如,像这样:
@RunWith(MyClassRunner.class)
@Params("paramFor1stRun", "paramFor2ndRun")
class MyTest {
@Test
public void doTest() {..}
}
Run Code Online (Sandbox Code Playgroud)
我认为 Runner 可以帮助我,但我不知道如何实现。你能给建议吗?
我有一个由 Spring 创建的游戏室列表。每个房间对应一些规则(即enum),代码为:
@Bean
List<Room> rooms() {
return Arrays.stream(Rules.values())
.map(rule -> new Room(rule))
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
但现在我也需要房间@Beans:我希望 Spring 处理其中的@EventListener注释。但是,我不想在配置中手动声明它们,因为Rules将来可以更新枚举。我怎么解决这个问题?谢谢。
我是Kotlin的新手,我尝试将一个小型Java项目改造成这种新语言.我在我的项目中使用mongodb,我有一个类,例如:
class PlayerEntity {
constructor() {} //for mongodb to create an instance
constructor(id: ObjectId, name: String) { //used in code
this.id = id
this.name = name
}
@org.mongodb.morphia.annotations.Id
var id: ObjectId? = null
var name: String? = null
}
Run Code Online (Sandbox Code Playgroud)
由于空构造函数,我必须将id字段标记为nullable(var id: ObjectId?).当我尝试从另一个类访问此字段时,我必须使用非null检查:thePlayer.id!!.但我的应用程序的逻辑是该id字段永远不为null(mongo创建一个Player实例并立即设置id字段).而且我不想在任何地方进行非空检查.
我试图创建一个非null的getter,但它不能编译:
var id: ObjectId? = null
get(): ObjectId = id!!
Run Code Online (Sandbox Code Playgroud)
我也可以为id创建一些存根,并在构造函数中使用它,但这看起来像一个肮脏的黑客:
val DUMMY_ID = new ObjectId("000000000000000000000000");
Run Code Online (Sandbox Code Playgroud)
那么有解决问题的解决方法吗?
我使用Mysql 5.7.18并且在更新时遇到了表情符号的问题JDBC.
表创建:body是键入的utf8,localizations是utf8mb4
CREATE TABLE `my_table` (
`body` TEXT NOT NULL,
`localizations` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8;
Run Code Online (Sandbox Code Playgroud)
现在我SequelPro用来插入数据.为了正确地做,我按Database -> View using encoding -> utf8mb4.插入代码:
INSERT INTO my_table(body, localizations) VALUES ('test', '');
Run Code Online (Sandbox Code Playgroud)
然后我尝试从jdbc加载它.这是当前在项目中使用的连接字符串部分(此处仅使用格式化以方便阅读):
?useEncoding=true
&characterEncoding=UTF-8
Run Code Online (Sandbox Code Playgroud)
它成功localizations从数据库加载.但是从JDBC更新表会返回错误:
SQLException: Incorrect string value: '\xF0\x9F\x94\xA5"}...' for column 'localizations'
Run Code Online (Sandbox Code Playgroud)
我想这是因为连接编码.SequelPro有一个Show server variables选项,这里的DIFF utf8和utf8mb4:
character_set_client = …Run Code Online (Sandbox Code Playgroud) 我对bash不太好,但我正在尝试创建一个脚本来杀死一些java进程:
/usr/ucb/ps -auxww \
| grep 'XUnit' \
| grep -v 'grep' \
| cut -c -2000 \
| awk '{print $2;}' \
| xargs kill
Run Code Online (Sandbox Code Playgroud)
cut这里使用的是因为awk行过长而失败(请参阅awkLINE_MAX的POSIX规范中的限制参考).
当没有这样的进程时会出现问题 - xargs尝试kill不带参数运行,从而导致错误.
我的xargs不接受-r或者--no-run-if-emptyargs,正如在没有指定POSIX合规性的相关问题的答案中所建议的那样.
我有一处房产gradle.properties:
answer = 42
Run Code Online (Sandbox Code Playgroud)
用于build.gradle:
println "answer is ${answer}"
Run Code Online (Sandbox Code Playgroud)
现在我想用 Kotlin 脚本替换 Groovy 以进行 Gradle 配置。如何以正确的方式访问属性?我现在在做的build.gradle.kts是:
fun property(name: String) = properties[name] as String
println("answer is " + property("answer"))
Run Code Online (Sandbox Code Playgroud)
这似乎不是很方便。谢谢!
在我的项目中,gradle 显示了依赖关系:
com.google.guava:guava:19.0 -> 20.0-rc1
com.google.guava:guava-jdk5:17.0
Run Code Online (Sandbox Code Playgroud)
Afaik gradle 选择同名依赖项的最新版本,这就是 v19 更改为 v20 的原因。有没有办法让gradle使用guava而不是guava-jdk5?