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?