有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当来自其他包的类失败时,java方法调用失败

我试图为我的程序编写基本代码,在返回一些信息之前,我想进行一些身份验证检查

这是它的一个示例代码

//伙计。爪哇

package com.test;
import java.lang.reflect.Method;
    public abstract class Man {
        protected abstract String getPassword();

        public final String getMailPassword(){
            try{
                Method method = getClass().getDeclaredMethod("getPassword");
                System.out.println("this: " + this);
                System.out.println("method: "+ method.toString());          
                //check something if all OK
                return (String)method.invoke(this);
                //else return null
            }catch(Exception ex){
                ex.printStackTrace();
            }
            return null;
        }
    }

//老板。爪哇

package com.test;
import com.test.Man;

public class Boss extends Man {
    @Override
    protected String getPassword() {
        return "Boss'_password";
    }

}

//测试员。爪哇

package com.test;
import com.test.test2.Boss;
public class Tester {
    public static void main(String arg[]){
        //System.out.println(new Servent().getMailPassword());      
        System.out.println(new Boss().getMailPassword());
    }
}

当我执行上述代码(Tester.java)时,它会正确执行(同一个包中的所有文件),我会得到以下输出

this: com.test.Boss@22509bfc
method: protected java.lang.String
com.test.Boss.getPassword() Boss'_password

但如果我搬家,老板。java到不同的包“test2”,我得到异常

java.lang.IllegalAccessException: Class com.test.Man can not access a member of class com.test.test2.Boss with modifiers "protected"
    at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:109)
    at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:261)
    at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:253)
    at java.lang.reflect.Method.invoke(Method.java:599)
    at com.test.Man.getMailPassword(Man.java:14)
    at com.test.Tester.main(Tester.java:8)
this: com.test.test2.Boss@5a30cefd
method: protected java.lang.String com.test.test2.Boss.getPassword()
null

我已经打印了'this',它给出了this: com.test.test2.Boss@5a30cefd,但是异常在本例中检测到了超类Class com.test.Man can not access a member of class com.test.test2.Boss with modifiers "protected"。我理解这个异常,但我不明白为什么在第二种情况下它会检测到超级类。如果有人能帮我解决这个问题(我需要在不同的包中有子类,我不能把它们放在同一个包中)


共 (0) 个答案