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

将可空类型转换为不可空类型?

璩正志
2023-03-14
package myapp.mybeans;

data class Foo(val name : String?);
package myapp.global;

public fun makeNewBar(name : String) : Bar
{
  ...
}

在其他地方,我需要从foo中的内容创建一个bar。所以,我这样做:

package myapp.someplaceElse;

public fun getFoo() : Foo? { }
...
val foo : Foo? = getFoo();

if (foo == null) { ... return; }


// I know foo isn't null and *I know* that foo.name isn't null
// but I understand that the compiler doesn't.
// How do I convert String? to String here? if I do not want
// to change the definition of the parameters makeNewBar takes?
val bar : Bar = makeNewBar(foo.name);

此外,在这里使用foo.name进行一些转换,以便每次都用每一个小东西清理它,一方面为我提供编译时保证和安全性,但这在大多数情况下是一个大麻烦。有没有一些短手来绕过这些情况?

共有1个答案

戈嘉慕
2023-03-14

你需要像这样的双感叹号:

val bar = makeNewBar(foo.name!!)

如Null安全部分所述:

第三种选择是给NPE爱好者的。我们可以写b!!,这将返回b的非空值(例如,我们示例中的字符串),如果b为空,则抛出一个NPE:

val l = b!!.length 
 类似资料:
  • 主要内容:Null 合并运算符(??)在 C# 1.x 的版本中,一个值类型的变量是不可以被赋值为 null(空值)的,否则会产生异常。而在 C# 2.0 中,新增了一个 nullable 类型,可以使用 nullable 类型定义包含 null 值的数据,例如,您可以在 nullable <Int32>(可为空的 int32 类型)类型的变量中存储 -2147483648 到 2147483647 之间的任何值或者 null。同样,

  • 问题内容: 这是我的代码 这里是我列的数据库,它的类型是,它是 可为空 我有这个例外: 无法将DBNull.Value强制转换为类型“ System.DateTime”。请使用可为空的类型。 你能帮忙吗? 问题答案: 支持可为null的类型,因此请使用代替:

  • 我们知道我们可以将null赋给可为null的类型。例如: 我们知道第二种说法是有效的,因为有人告诉我们它是有效的,我们只是接受它,而不问为什么。但如果查看的源代码,则为: 我们可以将赋给为的原因是由于隐式运算符,它允许您隐式强制转换int为。根据隐式运算符的规则,作为的右手边,必须是结构类型,但显然不是合法的结构值,那么如何做(更不用说本身就是一个结构),为什么不违反隐式运算符规则

  • C#提供了一个特殊的数据类型,可空类型,可以在其中指定正常范围值,以及空 (null) 值。 例如,在一个可空 变量中,你可以从 -2,147,483,648 到 2,147,483,647 或空值中存储任意值。 同样,你可以指定 true,false 或 null 的 Nullable 变量。声明一个可空类型 (Nullable) 的语法如下: < data_type> ? <variable_

  • 问题内容: PHP 7引入了返回类型声明。这意味着我现在可以指示返回值是某个类,接口,数组,可调用或新暗示的标量类型之一,对于函数参数而言,这是可能的。 通常,值并不总是存在,并且您可能返回某种类型的值或null。尽管可以通过将参数的默认值设置为null()来使参数为可空,但似乎没有办法对返回类型执行此操作。的确是这样,还是我不知如何找到方法呢?这些不起作用: 问题答案: PHP 7.1现在支持可

  • 假设我有一个函数: 如何指定可以为的返回类型?