Java 10中的var:类型推断新特性

正在被参与「Java主题月 - Java Debug笔记活动」的是本文, 详情查看处是那里那里的某个地方。

问, 在Java当中, C#里存在一个名为'var'的关键字, 那么与之等效的项是什么呢?

在C#里, var关键字存在着一种用法, 此用法是进行隐式类型声明, var的Java等效语法是什么呢?

回答1:

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

编辑, 发布7年之后, 于Java 10当中, 添加了针对局部变量, (此处使用var)的类型推断。

Java局部变量类型推断_java中 var是什么意思_Java var等效关键字

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

.C#运用var关键字是由于.NET里存有或许无名称的Types。举例来说, 一个, 比如。

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

处于这种情形下, 没法为其赋予恰当的类型。6年前, 于Java里这是做不成的(所有类型都存在名称, 即便它们极其冗长且笨拙)。我不清楚这是否与此同时发生了改变。

2, var有所不同。变量依旧是百分之百静态类型的。这是不能够编译的:

var myString = "foo";
myString = 3;

3, 即便类型于上下文里明显可知时, var仍旧具备实用性, 比如:

var currentUser = User.GetCurrent();

Java var等效关键字_java中 var是什么意思_Java局部变量类型推断

在我所负责的任意代码当中, 其中都存在着一个User或者是基于其派生出来的类。明显要是您的User实现返回的是一个int, 那么这或许会对您造成不利的影响。

4, 这和var没关系, 然而, 要是您有那种奇特的继承层次结构, 就是在这些结构里您把方法同其他方法(比如说, 新的void())一块儿用, 可别忘了非虚拟方法会受它们转换为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

如所示,虚拟方法不受此影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值