Java中C#'var'关键字的等价物是什么?
在C#中使用var关键字是隐式类型声明。 什么是var的Java等价语法?
空无一人。 唉,你必须输入完整的类型名称。
在发布6年后编辑,收集下面的一些评论:
  C#具有var关键字的原因是因为可能有.NET中没有名称的类型。  例如: 
var myData = new { a = 1, b = "2" };
  在这种情况下,将不可能给myData一个正确的类型。  6年前,这在Java中是不可能的(所有类型都有名称,即使它们非常冗长而且不流畅)。  我不知道这是否同时发生了变化。 
  var与dynamic不一样。  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?
