我正在尝试将ApiEmployee
转换为Employee
并围绕它进行测试。我很陌生,对Kotlin中的 null 感到困惑。
ApiEmployee
将用于JSON转换,因此它可能缺少name
字段,或者为空,或者为null。在这种情况下,我不想添加到列表中并安全地忽略它。
我在Method threw 'kotlin.KotlinNullPointerException at exception.
得到apiEmployee.name!!.isNotBlank()
ApiEmployee
data class ApiEmployee(val image: String? = "image",
val name: String? = "name test",
val description: String? = "",
val id: String? = "")
员工
data class Employee(val imagePath: String, val id: String)
EmployeeConverter (将ApiEmployee转换为Employee)
fun apply(apiEmployees: List<ApiEmployee>): List<Employee> {
val employees = mutableListOf<Employee>()
for (apiEmployee in apiEmployees) {
if (apiEmployee.name!!.isNotBlank()){
employees.add(Employee(apiEmployee.image!!, apiEmployee.id!!)
}
}
}
EmployeeConverterTest
@Test
fun `should not add employee without name into employee list`() {
val invalidApiEmployee = ApiEmployee("image", null, "description", "id")
val convertedEmployees : List< Employee > = employeeConverter.apply(listOf( invalidApiEmployee))
assertThat(convertedEmployees.size).isEqualTo(0)
}
答案 0 :(得分:0)
传递名称的值。
ApiEmployee("image", "name", "description", "id")
(或)
按以下所述更改if条件(使用?运算符):-
if (apiEmployee.name?.isNotBlank()){
?。执行安全调用(如果 接收者不为空)
!断言一个表达式是 非空
代码断言该名称不为null,并检查是否为空。
可能,我认为您正在尝试执行null而不是空白检查。您可以使用? operator (safe call)
。这意味着isNotBlank()
仅在名称不为null时被执行。
答案 1 :(得分:0)
您要执行的操作是先检查名称是否为空,然后再为空。
function connectedNodes() {
var poligono = g.selectAll("path");
var result = datosPoli.features;
for (var i = 0; i < result.length; i++) {
var poligonoNombre = result[i].properties.Name;
}
if (toggle == 0) {
//Reduce the opacity of all but the neighbouring nodes
d = d3.select(this.parentNode).datum();
r = d3.select(this).datum();
nodesAll
.transition()
.style("opacity", function (o) {
return neighboring(d, o) | neighboring(o, d) ? 1 : 0;
})
;
lineas
.transition()
.style("opacity", function (o) {
return d.index==o.source.index | d.index==o.target.index ? 0.5 : 0;
})
;
poligono
.filter(function(d){
for (var i = 0; i < result.length; i++) {
var poligonoNombre = result[i].properties.Name;
return poligonoNombre;
}
return d.id === poligonoNombre;
})
.attr('fill-opacity', 1)
;
text
.transition()
.style('opacity', function(o){
return neighboring(d, o) | neighboring(o, d) ? 1 : 0;
})
toggle = 1;
} else {
// devuelve los nodos a la normalidadlos links invisibles
nodesAll
.transition()
.style("opacity", 1)
;
lineas
.transition()
.style("opacity", 0)
;
poligono
.attr("fill-opacity", 0)
;
text
.transition()
.style('opacity', 1)
;
toggle = 0;
}
}
仅当name不为null时,val employeeNameIsNotEmpty = apiEmployee.name?.isNotBlank() ?: false
if (employeeNameIsNotEmpty) {
// do stuff
}
才会运行并返回一个值。如果name为null,则?:右侧的语句将返回其值,在这种情况下应为false。
但是在这种情况下,Kotlin已经将这个特定的示例放入扩展函数中
.isNullOrBlank()
因此您可以将其更改为:
apiEmployee.name?.isNotBlank()
请注意,您确实不希望这样做if (!apiEmployee.name.isNullOrBlank()) {
// do stuff
}
。
因为image和id仍然可以为null,并且使您的代码崩溃并出现相同的错误。