Java中C#'var'关键字的等价物是什么?

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


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

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

  • C#具有var关键字的原因是因为可能有.NET中没有名称的类型。 例如:

    var myData = new { a = 1, b = "2" };
    

    在这种情况下,将不可能给myData一个正确的类型。 6年前,这在Java中是不可能的(所有类型都有名称,即使它们非常冗长而且不流畅)。 我不知道这是否同时发生了变化。

  • vardynamic不一样。 var iables仍有100%的静态类型。 这不会编译:

    var myString = "foo";
    myString = 3;
    
  • 当类型从上下文显而易见时, var也很有用。 例如:

    var currentUser = User.GetCurrent();
    

    我可以说,在我负责的任何代码中, currentUser都有一个User或派生类。 很明显,如果你的User.GetCurrent的实现返回一个int,那么这可能对你不利。

  • 这与var没有任何关系,但是如果你new public void DoAThing()其他方法(例如new public void DoAThing() )来影射方法的奇怪继承层次结构,请不要忘记非虚拟方法受到它们被转换为类型的影响。

    我无法想象一个真实世界的场景,这表示设计良好,但这可能无法按预期工作:

    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没有实际变量。

    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;
    

  • 如果您将Lombok添加到项目中,则可以使用其val关键字。

    http://projectlombok.org/features/val.html


    JEP - JDK增强 - 建议

    http://openjdk.java.net/jeps/286

    JEP 286:局部变量类型推断

    作者Brian Goetz

    // Goals:
    var list = new ArrayList<String>();  // infers ArrayList<String>
    var stream = list.stream();          // infers Stream<String>
    
    链接地址: http://www.djcxy.com/p/2857.html

    上一篇: What is the equivalent of the C# 'var' keyword in Java?

    下一篇: What does PHP keyword 'var' do?