父对象属性怎么统一处理?
有个父类对象User(name,age)
子对象:UserA(a)
子对象:UserB(b)
需要在不同场景处理A和B中 User对象共有的属性,这个有什么办法和思路吗?
A和B对象中的a、b属性是有值的
回答:
“使用同一个方法,处理不同对象相同属性”
所以方法的参数,应该包括:
- 多个对象
- 相同属性的处理方法
- 处理需要的参数
void oneToMany(List<T> objs, String propMethod, String [] args)
然后为了一次调用,多处运行,这里需要几个前提
- 所有的对象都继承了同一个父类
- 需要执行的处理方法, 方法定义在父类,保证每个对象都有此方法(具体实现可以在子类)
public abstract class User{ public void modifyProp(String args);
}
public class UserA extends User{
public void modifyProp(String args){
this.name = "UserA:"+name;
}
}
public class UserB extends User{
public void modifyProp(String args){
this.name = "UserB:"+name;
}
}
然后我们借助反射,实现oneToMany中循环调用每个对象的propMethod方法
public void oneToMany(List<User> objs, String propMethod, String args){ for(User user : objs){
try {
User.class.getMethod(propMethod).invoke(user,args);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
试试使用
public static void main(String []args){ UserA userOne = new UserA();
UserB userTwo = new UserB();
List<User> users = new ArrayList();
users.add(userOne);
users.add(userTwo);
oneToMany(users, "modifyProp", "nameString")
}
回答:
是这样吗?
父类 User
package com.base;public abstract class User {
protected String name;
protected void setName(String name) {
this.name = name;
}
}
子类...
public class UserA extends User{ }public class UserB extends User { }
name是共有的属性, serName是处理属性的方法
直接掉就行了
package com.base;public class MainTest {
public static void main(String[] args) {
User userA = new UserA();
userA.setName("123");
System.out.println(userA.name); // 123
}
}
根据评论修改
这样呢是否符合需求?
package com.base;public abstract class User {
protected String name;
public static User a(String name, User user) {
user.name = name;
return user;
}
}
test
public static void main(String[] args) { User userA = new UserA();
User userB = new UserB();
// 设置属性
userA = User.a("AAA", userA);
userB = User.a("BBB", userB);
System.out.println(userA.name); // AAA
System.out.println(userB.name); // BBB
}
以上是 父对象属性怎么统一处理? 的全部内容, 来源链接: utcz.com/p/944874.html