父对象属性怎么统一处理?

有个父类对象User(name,age)
子对象:UserA(a)
子对象:UserB(b)
需要在不同场景处理A和B中 User对象共有的属性,这个有什么办法和思路吗?
A和B对象中的a、b属性是有值的


回答:

“使用同一个方法,处理不同对象相同属性”
所以方法的参数,应该包括:

  1. 多个对象
  2. 相同属性的处理方法
  3. 处理需要的参数
void oneToMany(List<T> objs, String propMethod, String [] args)

然后为了一次调用,多处运行,这里需要几个前提

  1. 所有的对象都继承了同一个父类
  2. 需要执行的处理方法, 方法定义在父类,保证每个对象都有此方法(具体实现可以在子类)
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

回到顶部