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

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

阅读 1.4k
2 个回答

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

  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
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题