栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java中的C#'var'关键字等效吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中的C#'var'关键字等效吗?

空无一人。las,您必须输入完整的类型名称。

编辑:发布7年后

var
,Java 10中添加了局部变量的类型推断(带有)。

编辑:发布6年后,从下面收集一些评论:

  • C#使用
    var
    关键字的原因是因为在.NET中可能有没有名称的Types。例如:
    var myData = new { a = 1, b = "2" };

在这种情况下,不可能给赋予正确的类型

myData
。6年前,这在Java中是不可能的(所有类型都有名称,即使它们非常冗长和笨拙)。我不知道这是否已经改变。

  • var
    与相同
    dynamic
    var
    变量仍然是100%静态键入的。这将无法编译:
        var myString = "foo";    myString = 3;
  • var
    当类型从上下文中显而易见时,它也很有用。例如:
    var currentUser = User.GetCurrent();

我可以说在我负责的任何代码中

currentUser
都有一个
User
或派生类。显然,如果您的实现
User.GetCurrent
返回一个int,则可能对您不利。

  • 这与无关
    var
    ,但是,如果您有奇怪的继承层次结构,在这些层次结构中您将方法与其他方法(例如
    new public void DoAThing()
    )一起使用,请不要忘记非虚拟方法会受到其强制转换为Type的影响。

我无法想象现实世界中的情况表明设计良好,但这可能无法按您期望的那样工作:

        class Foo {        public void Non() {}        public virtual void Virt() {}    }    class Bar : Foo {        public new void Non() {}        public override void Virt() {}    }    class Baz {        public static Foo GetFoo() { return new Bar();        }    }    var foo = Baz.GetFoo();    foo.Non();  // <- Foo.Non, not Bar.Non    foo.Virt(); // <- Bar.Virt    var bar = (Bar)foo;    bar.Non();  // <- Bar.Non, not Foo.Non    bar.Virt(); // <- Still Bar.Virt

如所示,虚拟方法不受此影响。

  • 不,没有
    var
    没有实际变量的非笨拙方法来初始化a 。
        var foo1 = "bar";        //good    var foo2;     //bad, what type?    var foo3 = null;         //bad, null doesn't have a type    var foo4 = default(var); //what?    var foo5 = (object)null; //legal, but go home, you're drunk

在这种情况下,只需采用老式的方法即可:

    object foo6;


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486208.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号