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的方法重载解析机制 (“隐式”或非故意 )为没有参数的方法提供了更高的优先级,而不是具有相同名称的实例字段。

您可以,但它是一种反模式,应该避免,并且可以被分析捕获,如下所示:

http://pmd.sourceforge.net/pmd-4.3.0/rules/naming.html