我知道我们可以使用"var"关键字在Kotlin中定义变量:
var foo = 3
Run Code Online (Sandbox Code Playgroud)
最新的java更新(java 10)也引入了"var"类型:
var bar = new int[]{1, 2, 3}; // int[] bar = {1, 2, 3}
Run Code Online (Sandbox Code Playgroud)
我的问题是,这些语言之间使用"var"的区别是什么?
在最后一期Heinz Kabutz的时事通讯#255 Java 10:推断的局部变量中,显示它var不是Java 10中的保留字,因为您也可以使用它var作为标识符:
public class Java10 {
var var = 42; // <-- this works
}
Run Code Online (Sandbox Code Playgroud)
但是,您不能使用ie assert作为标识符var assert = 2,因为它assert是一个保留字.
正如在链接的时事通讯中所说的那样,var不是保留字的事实是好消息,因为这允许来自Java的先前版本的代码var用作标识符在Java 10中编译而没有问题.
那么,那是什么var?它既不是显式类型也不是语言的保留字,因此它被允许作为标识符,但是当它用于在Java 10中声明局部变量时它确实具有特殊含义.我们究竟在一个上下文中调用它局部变量声明?
此外,除了支持向后兼容性(通过允许包含var作为标识符的旧代码进行编译),还有其他优点是var 不是保留字吗?
我正在阅读关于Implicitly Typed Local Variables(var)的内容
http://msdn.microsoft.com/en-us/library/bb384061.aspx
它说明了一个限制:
如果名为var的类型在范围内,则var关键字将解析为该类型名称,并且不会被视为隐式类型的局部变量声明的一部分.
任何人都可以通过C#示例解释声明的含义吗?
我可以做这个:
new Object(){
public void hi(){}
}.hi();
Run Code Online (Sandbox Code Playgroud)
我该如何(或我可以)做到这一点:
IWouldRatherStayAnonymous t = new IWouldRatherStayAnonymous extends Thread(){
public void NoNoYouCantCallMe(String s){}
};
t.NoNoYouCantCallMe("some useful data that i will need later, but don't want to save this anonymous class");
Run Code Online (Sandbox Code Playgroud)
如果我不能在语法上做到这一点,任何人都可以解释为什么这永远不会起作用的逻辑/实现设计吗?
===========================================
编辑:澄清 - 我想创建一个匿名类而不保存它,然后实例化该匿名类的实例。我只需要 1 个引用,因为我不打算经常使用这个引用(即使在同一个外部类中我也不希望其他任何东西使用它)。但是,我只想将一些数据传递给这个匿名类一次(最好是构造函数,但您会注意到实际上无法重写 Thread() 中的构造函数)。
这确实不是什么大不了的事,我只是好奇这是否可行,但从一些答案来看,它似乎是可行的,但只是不太漂亮。
我的问题看起来很愚蠢......对我而言,这看起来真的很愚蠢.但是我很震惊地看到var关于android的视频教程中的java代码中的关键字,你可以在这里看到它,例如38分钟......
所以我的问题是,如何var在java代码中拥有它以及它在java中意味着什么,我们在没有特定类型的情况下不能有引用?