gpt4 book ai didi

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

转载 作者:bug小助手 更新时间:2023-10-28 10:39:53 34 4
gpt4 key购买 nike

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

最佳答案

没有。唉,你必须输入完整的类型名称。

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

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

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

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

    在这种情况下,不可能为 myData 提供正确的类型。 6 年前,这在 Java 中是不可能的(所有类型都有名称,即使它们非常冗长和笨拙)。我不知道这是否同时发生了变化。

  • vardynamic 不同。 variables 仍然是 100% 静态类型的。这不会编译:

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

    var currentUser = User.GetCurrent();

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

  • 这与 var 无关,但如果你有奇怪的继承层次结构,你会在其中隐藏方法与其他方法(例如 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;

关于java - Java 中 C# 'var' 关键字的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3443858/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com