GVKun编程网logo

关于返回 Null 值的问题(返回值为null)

23

想了解关于返回Null值的问题的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于返回值为null的相关问题,此外,我们还将为您介绍关于Aidl调用,回调返回null的问题、C#z中关于存取数据

想了解关于返回 Null 值的问题的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于返回值为null的相关问题,此外,我们还将为您介绍关于Aidl调用, 回调返回null的问题、C#z中关于存取数据库NULL和0的问题、C/C++学习之路(三)C++关于返回局部变量的问题、failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8的新知识。

本文目录一览:

关于返回 Null 值的问题(返回值为null)

关于返回 Null 值的问题(返回值为null)

我总感觉一个方法返回null值有问题。 当读了Misko Hevery关于how to think about OO的博客文章后,又让我想起这个问题。

我感觉返回null值是有问题的,它大量的被使用在一个方法有不同的返回类型时。 简单的用谷歌搜索一下“returning null”,你就会发现有建议把返回类型做成一个null对象。 返回一个Null对象在某些情况下是合适的,但并不适合当你需要向客户端传送两种不同的东西的情形。

用Misko重构的一段代码来说明这个问题。 他重构的是一段登录代码(我非常喜欢他的过程),这段代码大概是这个样子:

Cookie login(Ldap ldap) {
    if ( ldap.auth(user, password) )
      return new Cookie(user);
    return null;
}

从这段代码,可以看出两种情况(从结构上讲)

1. 如果认证通过, 客户端会被通知验证成功, 生成一个新的Cookie
2. 如果认证失败, 则通过返回的null值通知客户端

客户端的方法应该是什么样的?

public void authenticateUser(User user) {
    Cookie userCookie = user.login(ldap);
    if (userCookie == null) {
        //notify someone that auth failed
    } eles {
        //register them as logged in
    }
}

我们在两个地方做了相同的事情,只是在语法上有稍微的不同,每个地方,我们都要检查验证是否成功。 如果我们使用IoC(反向控制)模式,或“Tell Don’t Ask”模式或“Hollywood原则”,会如何?

Cookie login(Ldap ldap, AuthenticationRegistry authenticationRegistry) { if ( ldap.auth(user, password) ) authenticationRegistry.authSucceeded(new Cookie(user)); authenticationRegistry.authFailed(user); }

客户端:

public void authenticateUser(User user) {
    user.login(ldap,this);
}

public void authSucceeded(Cookie cookie) {
    //register them as logged in
}

public void authFailed(User user) {
    //register them as auth failed
}

新代码稍微有点复杂,但我感觉它很清晰,实现的更直接。 现在我们的两个实体能够相互通信,我们定义了它们通信的方式。 我喜欢Misko的重构,我只是更进了一步。 好坏可以再讨论,但我想,如果你遇到了这种需要返回两种情况的方法时,IoC是你应该的选择。

本文英文原文链接:Returning Null

翻译:http://justjavac.com/java/2012/05/18/returning-null.html

Aidl调用, 回调返回null的问题

Aidl调用, 回调返回null的问题

今天为Aild 加了一个回调, 结果在服务端的callback总是返回null. 于是debug一步步跟进去 发现得到的arg1就是null 也就是data.readStrongBinder()返回了null

输入图片说明

那只能证明是没有在客户端写进去:

输入图片说明

原来asBinder是null.

输入图片说明

根本原因是 应该使用 new ManagerCallback.Stub() 而不是 new ManagerCallback

修改之后 成功运行

C#z中关于存取数据库NULL和0的问题

C#z中关于存取数据库NULL和0的问题

需求: 注册用户的时候,对于年龄,地址,姓名等字段如果客户不想填写,这说明这些字段的值是“不知道”,

但是,如果按照一般的观点,存入数据库的则是0,或者“ ”空,这是不符合要求的,因此,需要存入数据库的应该是null

此时,需要DbNull的用法

//存储数据的时候这样使用
//获取控件输入的字符
string name = txtName.Text;
string age = txtAge.Text;
string height = txtHeight.Text;
//如果没用户没有输入姓名,则Text属性为空字符串
object objName;
if(name.Length<=0)
{
    objName = DBNull.Value;//DBNull.Value用来表示数据库中的值
}
else
{
    objName = name;
}
object objAge;
if(age.Length<=0)
{
    objAge = DBNull.Value;
}
else
{
    objAge = age;
}

//读取数据的时候这样使用
DataRow row = table.Rows[0];
string name;
if(row["Name"]==DBNull.Value)
{
    name=null;
}
else
{
    name = (string)row["Name"];
}
int? age;//int age 不行,因为int不可以为null,加?号,表示一个可空的int类型
if(row["Age"]==DBNull.Value)
{
    age = null;
}
else
{
    age = (int)row["Age"];
}
int Height = (int)row["Height"];


微软MSDN的解释如下:

DBNull 类表示一个不存在的值。 例如,在数据库的表中,某一行的某列中可能不包含任何数据。 即,该列被视为根本不存在,而不只是没有值。 一个表示不存在的列的 DBNull 对象。 此外,COM 互操作使用 DBNull 类来区分 VT_NULL 变量(指示不存在的值)和 VT_EMPTY 变量(指示未指定的值)。

DBNull 类型是一个单独的类,这意味着只有一个 DBNull 对象存在。 DBNull.Value 成员表示单独的 DBNull 对象。DBNull.Value 可用于将不存在的值显式分配给数据库字段,但大多数 ADO.NET 数据提供程序在字段没有有效值时会自动分配 DBNull 值。 您可以通过将从数据库字段检索到的值传递给 DBNull.Value.Equals 方法,确定该字段值是否为 DBNull 值。 然而,有些语言和数据库对象提供一些方法,可以更容易地确定数据库字段值是否为DBNull.Value。 这些方法包括 Visual Basic 的 IsDBNull 函数、Convert.IsDBNull 方法、DataTableReader.IsDBNull 方法和 IDataRecord.IsDBNull 方法。

请勿将面向对象的编程语言中的 null 概念与 DBNull 对象混淆。 在面向对象的编程语言中,null 表示缺少对象的引用。 DBNull 表示未初始化的变量或不存在的数据库列。


C/C++学习之路(三)C++关于返回局部变量的问题

C/C++学习之路(三)C++关于返回局部变量的问题

先说明,在C/C++中,程序的局部变量存储在栈中,在函数运行结束后,系统栈中的内容会被释放,此时如果返回局部变量的值,那么不会有任何问题,但如果返回地址,就有可能会出现问题。
如果一定要返回地址,那么以下是一些可能出现的情况:
一.存储在常量区的内容可以被返回
char *myfunc()
{
    char *p="aaaaa";
    return p;//这样是可以的,因为字符串常量存储在常量区
    //存储位置类似于static成员,在程序运行结束后不会被销毁
}

char *myfunc2()
{
    char p[]="aaaaa";
    return p;//这样不行,因为p指向的空间的内容已经被释放
}
二.static可以被返回
char *myfunc3()
{
    static char p[]="aaaaa";
    return p;//这样是可以的,因为p指向的内容存储在常量区
}
三.返回一个值一定是没问题的
char myfunc4()
{
    int a=5;
    retutn a;//返回一个值是没问题的
}
四.返回指向堆的指针也是没问题
node *myfunc5()
{
    node* head = new Node;
    head->data = 5;
    head->next = nullptr;
    return head;//这也是没有问题的
}
特别提示,动态内存的生存期有程序员自己决定。综上所述,能不能返回局部变量及其地址,主要看该变量在内存的存储位置,只要是在系统栈中存储的局部变量,统统不可以返回其地址,而在静态区/常量区或是堆区的变量,返回其地址是没有问题的,这是由变量的生存期决定的。

failed to parse: {

failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8

IDEA整合springboot与neo4j时出现这个问题

关于关于返回 Null 值的问题返回值为null的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Aidl调用, 回调返回null的问题、C#z中关于存取数据库NULL和0的问题、C/C++学习之路(三)C++关于返回局部变量的问题、failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8等相关内容,可以在本站寻找。

本文标签: