>Java >java지도 시간 >Java에서 호출 메소드를 사용하는 방법은 무엇입니까?

Java에서 호출 메소드를 사용하는 방법은 무엇입니까?

WBOY
WBOY앞으로
2023-04-25 14:55:071641검색

우선 호출 메소드가 무엇을 하는지, 구체적인 용도를 이해해야 합니다. 실제로 소스 코드에 어떤 클래스 파일이 있는지, 어떤 패키지에 있는지 알아내고 소스를 추적해야 합니다.

invoke 메소드는 Method 클래스에서 나오며 우리가 자주 사용하는 기본 유형 래퍼 클래스뿐만 아니라 컬렉션 클래스와 해당 확장 및 유틸리티 클래스만큼 사용되지 않을 수 있습니다.

하지만 Method 클래스가 위치한 패키지는 Reflection으로 유명한 Refract입니다. Java에 Reflection이 없다는 말이 없다면 많은 프레임워크가 존재하지 않을 것입니다.

우리는 종종 새로운 객체를 생성하지만 new의 전제는 새로운 객체를 생성하기 전에 어떤 객체가 필요한지 아는 것입니다. 그러나 코드와 실제 생활 모두에서 알 수 없는 것이 있습니다. 즉, 어떤 클래스인지 알 수 없습니다. 프로그램이 실행될 때 조건에 따라 제한될 때까지입니다.

Reflection은 런타임에 객체 구조를 얻고 메서드를 호출하여 이 문제를 해결합니다.
Method 클래스는 Reflection Call Method에 관한 것입니다
아래 그림은 Method 클래스의 공식 Annotation입니다

Java에서 호출 메소드를 사용하는 방법은 무엇입니까?

아마도 클래스나 인터페이스의 메소드 정보를 제공함으로써 해당 메소드에 접근하여 호출할 수 있다는 의미일 것입니다.

Invoke는 호출을 의미합니다. 즉, 리플렉션 패키지 아래의 Method 클래스를 통해 호출 메서드를 호출하고, 우리가 제공하는 메서드와 호출 메서드의 매개변수를 호출하여 동적 호출을 완료할 수 있습니다.

즉, 객체/인스턴스, 메소드 이름, 사용자가 제공하는 매개변수를 기반으로 호출됩니다. 메소드를 호출하는 데 도움이 되는 "대체"를 찾으십시오.

2 Invoke 메소드의 사용법
사실 Invoke 메소드의 사용법은 우리가 흔히 보는 것과는 다릅니다.

우리는 종종 객체 A, 즉 A 객체에서 getA() 메소드를 생성한 다음 A.getA()를 생성합니다.

우리는 새로운 호출 방식을 사용합니다.
(1) 메소드를 "대체"합니다(실제로는, 메소드 객체를 만들고, 이 메소드 객체가 지금 사용하려는 메소드를 대체하도록 하세요)
(2) 그런 다음 아바타에 필요한 객체와 매개변수를 제공하고 아바타가 당신을 위해 그것을 호출하도록 합니다(JOJO의 아바타가 당신을 위해 싸울 것처럼)

구체적인 코드 데모는 다음과 같습니다.

public class InvokeTest {
    public void test(String[] arg){
        for (String string : arg) {
            System.out.println("zp is " + string);
        }
    }
    @Test
    public void invokeDemo() throws Exception {
        //获取字节码对象,这里要填好你对应对象的包的路径
        Class<InvokeTest> clazz = (Class<InvokeTest>) Class.forName("com.example.zp.demo.testDemo.InvokeTest");
        //形式一:获取一个对象
//        Constructor con =  clazz.getConstructor();
//        InvokeTest m = (InvokeTest) con.newInstance();
        //形式二:直接new对象,实际上不是框架的话,自己写代码直接指定某个对象创建并调用也可以
        InvokeTest m = new InvokeTest();
        String[] s = new String[]{"handsome","smart"};
        //获取Method对象
        Method method = clazz.getMethod("test", String[].class);
        //调用invoke方法来调用
        method.invoke(m, (Object) s);
    }

따라서 호출 메서드를 사용하려면 다른 메서드보다 한 단계 더 많은 단계가 필요합니다. 즉, 이 개체는 프로그램이 현재 호출하는 메서드를 대체합니다.

그리고 호출에는 매개변수 외에도 객체가 하나 더 필요합니다. 메소드 호출에는 객체가 필요하기 때문입니다. 따라서 호출하는 대상 메소드가 호출하려면 대상 메소드의 필수 객체가 필요합니다.

invoke 메소드는 일반 메소드를 직접 호출하는 것보다 더 번거로울 뿐만 아니라, 매개변수만 입력하면 다양한 대체 메소드를 호출할 수 있고, 알 수 없는 상황에서는 어떤 객체를 지정할지 생각해 본 적 있으신가요? 조건에 따라 호출하려면 어떤 방법으로 코드를 갑자기 유연하게 만들 수 있을까요? 이는 Invoke의 장점일 뿐만 아니라 프로그램 실행 시 조건에 따라 유연하게 사용할 수 있다는 장점도 있습니다. .

위 내용은 Java에서 호출 메소드를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제