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

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中的C#&#39;var&#39;关键字等效吗? 的全部内容, 来源链接: utcz.com/qa/412265.html

回到顶部