2015-02-03 3 views
3

Java에서 java.lang.reflect.Method 개체의 인스턴스를 identity (ie ==)로 비교할 수 있습니까? 아니면 equals()를 사용해야합니까?Java Method 객체를 identity (즉. ==)로 비교할 수 있습니까? 아니면 equals()를 사용해야합니까?

+0

달성 할 수있는 작업에 따라 다를 수 있습니다. 'Method.equals()'의 의미는 [javadocs] (http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html#equals%28java)에서 설명합니다. lang.Object % 29) – DNA

+3

이 질문이 잘못되었다고 생각합니다. OP는'java.lang.reflect.Method' 클래스에 대해 묻습니다. java.lang.refass.Method 클래스는 java.lang.Class 클래스와 거의 같은 generic == vs equals()가 아닙니다. –

+1

@Magnamag 경우는 동일합니다. '=='이 아니라 객체 참조에 대해 'equals'를 사용하십시오. '=='를 사용할 수 있는지 확인하려면 테스트를 작성하십시오. 이 나쁜 질문들로 사이트가 오염 될 수있게 해줘서 고마워요. –

답변

4

일반적으로 ==equals의 차이는 아니지만 특히 java.lang.reflect.Method 인스턴스를 나타냅니다. JVM을 정확히 한 번 만들어집니다 Class 객체, 유사 - 각 Method하나의 인스턴스이 존재한다고 가정하는 것이 정당화 될 수 있기 때문에

그것은 합리적인 질문입니다.

그러나, 이러한 경우가이 예에서 볼 수 있듯이 그들은, 동일하지 않더라도, 두 Method 객체가 equal 될 수있다 (또한 이러한 사실을 강조하고, Class 개체에 대한 비교를 수행 동일)

package stackoverflow; 

import java.lang.reflect.Method; 

public class MethodEquals 
{ 
    public static void main(String[] args) throws Exception 
    { 
     checkMethods(); 
     checkClasses(); 
    } 

    static void checkMethods() throws Exception 
    { 
     Method m0 = MethodEquals.class.getMethod("exampleMethod", int.class); 
     Method m1 = MethodEquals.class.getMethod("exampleMethod", int.class); 

     boolean identical = (m0 == m1); 
     boolean equal = m0.equals(m1); 

     System.out.println("Methods: "+(identical == equal)); // prints "false" 
    } 

    static void checkClasses() throws Exception 
    { 
     Class<?> c0 = Class.forName("stackoverflow.MethodEquals"); 
     Class<?> c1 = Class.forName("stackoverflow.MethodEquals"); 

     boolean identical = (c0 == c1); 
     boolean equal = c0.equals(c1); 

     System.out.println("Classes: "+(identical == equal)); // prints "true" 
    } 

    public float exampleMethod(int i) 
    { 
     return 42.0f; 
    } 
} 
+0

_real_ 답변은 'exampleMethod'의 반환입니다. –