/*分别给cl 和li初始化为null后运行又有nullpointerexception
总而言之,就是觉得try{}里面的赋值没有成功*/
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Scanner;
public class Exercise21 {
public static void main(String[] args)
{
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("用户名:");
String name=sc.nextLine();
System.out.println("密码:");
String password=sc.nextLine();
if(new LoginCheck().login(name, password))
System.out.println("登陆成功!");
else
System.out.println("登陆失败!");
}
}
@Retention(value=RetentionPolicy.RUNTIME)
@interface LoginInfo
{
public String name();
public String password();
}
class LoginCheck
{
@LoginInfo(name="zmx",password="123456")
public boolean login(String name,String password)
{
Class<?> cl=null;
try
{
cl=Class.forName("LoginCheck");
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
LoginInfo li=null;//这里不初始化会报错
try
{
li = cl.getMethod("login").getAnnotation(LoginInfo.class);//将这里的getMethod("login")改成getMethod("login",String.class,String.class)就ok了
}
catch (NoSuchMethodException e)
{
e.printStackTrace();
}
catch (SecurityException e)
{
e.printStackTrace();
}
return li.name().equals(name)&&li.password().equals(password);
}
}