加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java对象不是声明类的实例

发布时间:2020-12-15 04:30:36 所属栏目:Java 来源:网络整理
导读:public class SendEmailImpl { private boolean isValidEmailAddress(String email) { boolean stricterFilter = true; String stricterFilterString = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}"; String laxString = ".+@.+.[A-Za-z]{2}[A-Za-
public class SendEmailImpl 
{     
    private boolean isValidEmailAddress(String email)
    {
        boolean stricterFilter = true;
        String stricterFilterString = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}";
        String laxString = ".+@.+.[A-Za-z]{2}[A-Za-z]*";
        String emailRegex = stricterFilter ? stricterFilterString : laxString;
        Pattern p = Pattern.compile(emailRegex);
        Matcher m = p.matcher(email);
        return m.matches();
    } 
}

我尝试使用反射调用此代码

@Test
public void testValidEmail() throws NoSuchMethodException,IllegalAccessException,IllegalArgumentException,InvocationTargetException
{
    Method method = SendEmailImpl.class.getDeclaredMethod("isValidEmailAddress",String.class);
    method.setAccessible(true);
    Boolean invoke = (Boolean) method.invoke("isValidEmailAddress",String.class);

    assertTrue(invoke);
    System.out.println("Testing E-mail validator - case example@example.com");
}

但我得到错误

java.lang.IllegalArgumentException: object is not an instance of declaring class

你知道我的代码在哪里错了吗?

我也试过这个:

@Test
public void testValidEmail() throws NoSuchMethodException,InvocationTargetException
{
    Method method1 = SendEmailImpl.class.getDeclaredMethod("isValidEmailAddress",String.class);
    method1.setAccessible(true);

    Boolean invoke = (Boolean)method1.invoke(String.class);
    assertTrue(invoke);
    System.out.println("Testing E-mail validator - case example@example.com");
}

但结果是一样的.

解决方法

您正在使用Class< String>调用isValidEmailAddress方法参数(String.class)而不是String.此外,第一个参数应该是您要调用方法的类的实例(因为它不是静态方法).

引用Method.invoke Javadoc:

Parameters:

  • obj – the object the underlying method is invoked from
  • args – the arguments used for the method call

更正代码:

@Test
public void testValidEmail() throws NoSuchMethodException,InvocationTargetException {
    SendEmailImpl instance = new SendEmailImpl();
    Method method = instance.getClass().getDeclaredMethod("isValidEmailAddress",String.class);
    method.setAccessible(true);
    Boolean invoke = (Boolean) method.invoke(instance,"myStringArgument");
    // rest of code
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读