java实例变量和具有相同名称的方法
在java中,实例变量和方法是否具有相同的名称,没有任何不稳定或冲突?
我想确定我是否可以逃脱编译,它不会导致任何错误。
是的,这很好,主要是因为从语法上讲,它们的使用方式不同。
它完全没问题,因为方法和变量的调用方式不同。
码:
String name = "myVariable"; public String name() { return "myMethod"; } System.out.println(name()); // Brackets for method call System.out.println(name); // No brackets for variable call
输出:
myMethod的
MYVARIABLE
我能想到的唯一冲突是
int sameName = 5; public int sameName() { //method body return 100; }
如果您在编写“this.sameName()”时编写“this.sameName” , 反之亦然在程序中的某个位置,则代码的消失才刚刚开始。
我实际上遇到了一个非常具体的问题。 它只是在Java 8中使用(使用Nashorn),而在Java 6中使用(使用Rhino)。 如果它尝试通过Javascript访问Java对象的实例变量,则[]
运算符将返回方法实例。
假设我正在运行以下Java声明:
class MyClass { private boolean isSet=false; public boolean isSet() { return isSet; } }
如果我在Javascript中操作这样的类的对象,然后尝试使用[]
运算符访问它,我得到方法引用。
var obj = new MyClass(); var myfields = (myclass.getClass()).getDeclaredFields(); var myfieldname = myfields[0].name; // The following prints the method declaration, not the boolean value: // [jdk.internal.dynalink.beans.SimpleDynamicMethod boolean MyClass.isSet()] println( obj[myfieldname] );
更新:显然Nashorn的方法重载解析机制 (“隐式”或非故意 )为没有参数的方法提供了更高的优先级,而不是具有相同名称的实例字段。
您可以,但它是一种反模式,应该避免,并且可以被分析捕获,如下所示:
- Android GoogleMaps V2 MarkerDemo IllegalStateException没有包括点
- R.layout.menu无法解决
- Android如何使用/显示MediaController与SurfaceView和MediaPlayer的video?
- GWT / GAE – 不包括.symbolMap资源文件
- 服务被杀死时销毁前台通知
- Android线程/处理程序错误IllegalStateException:尚未发布指定的消息队列同步障碍标记
- 非静态变量在创建类的实例时,不能从静态上下文引用它
- Android-Studio-2.3错误:java.util.concurrent.ExecutionException:java.lang.RuntimeException:AAPT进程尚未准备好接收命令
- 以下是什么标志:<<?