老师帮我看看我的回答如何,有需要改进的地方吗

来源:3-10 自由编程

Wonwayshon

2021-01-05 10:48:52

package com.imooc.reflect.project;

public class Address {

//私有属性:地址编号、姓名、详细地址、电话
private Integer code;
private String name;
private String detail;
private Integer tel;

//无参构造及带参构造,get和set方法
public Address(Integer code, String name, String detail, Integer tel) {
super();
this.code = code;
this.name = name;
this.detail = detail;
this.tel = tel;
}
public Address() {
super();
// TODO Auto-generated constructor stub
}

public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
public Integer getTel() {
return tel;
}
public void setTel(Integer tel) {
this.tel = tel;
}

//toString()方法
@Override
public String toString() {
return "Address [code=" + code + ", name=" + name + ", detail=" + detail + ", tel=" + tel + "]";
}

//公有方法public void display(){}输出:这是一个地址
public void display() {
System.out.println("这是一个地址!");
}

//私有方法private void info(){}输出:我是私有方法
private void info() {
System.out.println("我是私有方法!");
}

//私有方法private void equalsAddress(String name){}比较参数和name的值是否一致
//输出比较结果,如:相等,或不相等
private void equalsAddress(String name) {
if(name.equals(this.name)) {
System.out.println("相等");
}else {
System.out.println("不相等");
}
}
}

​package com.imooc.reflect.project;

import java.lang.reflect.Method;

import org.junit.Test;

public class MethodTest {
@Test
//通过Method调用display()方法
public void demo1() throws Exception {
Class clazz=Class.forName("com.imooc.reflect.project.Address");
Address address=(Address) clazz.newInstance();
Method methodDisplay=clazz.getMethod("display");
methodDisplay.invoke(address);
}

@Test
//通过Method调用info()方法
public void demo2() throws Exception {
Class clazz=Class.forName("com.imooc.reflect.project.Address");
Address address=(Address) clazz.newInstance();
Method methodInfo=clazz.getDeclaredMethod("info");
methodInfo.setAccessible(true);
methodInfo.invoke(address);
}

@Test
//通过Method调用equalsAddress(String name)方法
public void demo3() throws Exception {
Class clazz=Class.forName("com.imooc.reflect.project.Address");
Address address=(Address) clazz.newInstance();
Method methodEqualsAddress=clazz.getDeclaredMethod("equalsAddress",String.class);
methodEqualsAddress.setAccessible(true);
methodEqualsAddress.invoke(address,"");
}
}

还有一个问题,代码最后部分这里传参传null为什么会报错呢?

methodEqualsAddress.invoke(address,null);


写回答

1回答

好帮手慕小尤

2021-01-05

同学你好,1. 同学的代码写的不错,继续加油!符合作业要求。

2. invoke 方法的第二个参数是可变参数(实际上是一个数组,你直接给一个 null 的话,jvm 会视为你没给参数。所以会报错。

3. 如果你想为null,将 null 显示强转为 String 就可以了。如下所示:

    ​http://img.mukewang.com/climg/5ff414dd0950c70509660186.jpg

    ​http://img.mukewang.com/climg/5ff414fe0976048805880248.jpg

祝学习愉快!

0

0 学习 · 8016 问题

查看课程