当前位置: 首页 > 面试题库 >

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

岳鸿畴
2023-03-14
问题内容

C#中 var 关键字的一种用法是隐式类型声明。 var 的Java等效语法是什么?


问题答案:

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

编辑:发布7年后var,Java 10中添加了局部变量的类型推断(带有)。

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

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

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

  • var与相同dynamicvar变量仍然是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;


 类似资料:
  • 问题内容: 我知道Java本身没有直接的等效项,但也许是第三方? 真的很方便。当前,我想实现一个迭代器,该迭代器生成树中的所有节点,这大约是带有yield的五行代码。 问题答案: 我知道的两个选项是2007年的Aviad Ben Dov的infomancers- collections库 和2008年的Jim Jimler的YieldAdapter库 (在另一个答案中也提到了)。 两者都允许您使用

  • 本文向大家介绍C#中var关键字用法分析,包括了C#中var关键字用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了C#中var关键字用法。分享给大家供大家参考。具体方法如下: C#关键字是伴随着.NET 3.5以后,伴随着匿名函数、LINQ而来, 由编译器帮我们推断具体的类型。总体来说,当一个变量是局部变量(不包括类级别的变量),并且在声明的时候初始化,是使用var关键字的前提。具

  • 问题内容: 来自C和C ++背景,我发现明智地使用typedef会带来极大帮助。您是否知道在Java中实现类似功能的方法,无论是Java机制,模式还是您使用的其他有效方法? 问题答案: Java具有原始类型,对象和数组,仅此而已。没有typedef。

  • 问题内容: 我正在阅读“学习节点”这本书,但陷入了一个非常简单的问题,这个问题我并没有考虑太多:javascript中的赋值。 作者指出,我们应该意识到,通过使用Node的REPL,以下内容将返回undefined: 而以下代码将在REPL中返回“ 2”: 这是为什么?上面的代码不是归因吗?怎么会?如果var’a’直到代码中的那个点才存在,那么为什么它不存在并归因于此? 问题答案: 根据ECMA-

  • jdk 11中使用“var”时编译时的问题 如何避免IntelliJ重置语言级别?

  • 本文向大家介绍浅谈Java中的final关键字与C#中的const, readonly关键字,包括了浅谈Java中的final关键字与C#中的const, readonly关键字的使用技巧和注意事项,需要的朋友参考一下 在编程语言中都有某种方式,告知编译器一块数据是恒定不变的。有两个需求 1. 一个永不改变的编译器常量 2. 一个在运行时被初始化的值,而这个值不会被改变 在Java中,使用fina