Discuss / Java / 反射的方法没法运行怎么办,报NoSuchMethodException

反射的方法没法运行怎么办,报NoSuchMethodException

Topic source

笑川之主

#1 Created at ... [Delete] [Delete and Lock User]

serialization.java

package com.company;import java.io.*;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Arrays;class clazz implements Serializable{    private String name;    private int age;    public static void out(){        System.out.println("clazz类out方法运行了");    }}public class serialization {    public static void main(String[] args) throws IOException {        ByteArrayOutputStream buffer=new ByteArrayOutputStream();        try(ObjectOutputStream objectOutputStream=new ObjectOutputStream(buffer)){            objectOutputStream.writeInt(50);            objectOutputStream.writeUTF("String");            objectOutputStream.writeObject(new clazz());            try {                objectOutputStream.writeObject(Class.forName("com.company.Person"));            } catch (ClassNotFoundException e) {                e.printStackTrace();            }        }        System.out.println(Arrays.toString(buffer.toByteArray()));        ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(buffer.toByteArray());        try(ObjectInputStream objectInputStream=new ObjectInputStream(byteArrayInputStream)){            System.out.println(objectInputStream.readInt());            System.out.println(objectInputStream.readUTF());            Object object;            try {                System.out.println(object=objectInputStream.readObject());                ((clazz)object).out();                System.out.println(object=objectInputStream.readObject());                try {                    Method method=object.getClass().getMethod("getall");                    try {                        method.invoke(object);                    } catch (IllegalAccessException e) {                        e.printStackTrace();                    } catch (InvocationTargetException e) {                        e.printStackTrace();                    }                } catch (NoSuchMethodException e) {                    e.printStackTrace();                }            } catch (ClassNotFoundException e) {                e.printStackTrace();            }        }    }}


Person.java

package com.company;

public class Person {
    private String name="example";
    private int age=0;
    private int gender=0;
    private String email="example@example.com";


    public void m1() {
        System.out.println("Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                ", email='" + email + '\'' +
                '}');
    }

    public Person() {
    }

    public Person(String name, int age, int gender, String email) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.email = email;
    }

笑川之主

#2 Created at ... [Delete] [Delete and Lock User]
package com.company;

import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;

class clazz implements Serializable{
    private String name;
    private int age;
    public static void out(){
        System.out.println("clazz类out方法运行了");
    }
}
public class serialization {

    public static void main(String[] args) throws IOException {

        ByteArrayOutputStream buffer=new ByteArrayOutputStream();
        try(ObjectOutputStream objectOutputStream=new ObjectOutputStream(buffer)){
            objectOutputStream.writeInt(50);
            objectOutputStream.writeUTF("String");
            objectOutputStream.writeObject(new clazz());
            try {
                objectOutputStream.writeObject(Class.forName("com.company.Person"));
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        System.out.println(Arrays.toString(buffer.toByteArray()));
        ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(buffer.toByteArray());
        try(ObjectInputStream objectInputStream=new ObjectInputStream(byteArrayInputStream)){
            System.out.println(objectInputStream.readInt());
            System.out.println(objectInputStream.readUTF());
            Object object;
            try {
                System.out.println(object=objectInputStream.readObject());
                ((clazz)object).out();
                System.out.println(object=objectInputStream.readObject());
                try {
                    Method method=object.getClass().getMethod("m1");
                    try {
                        method.invoke(object);
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                    }

                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
}

  • 1

Reply