就是比如有一个类A需要对其做逻辑处理,这时将这个类的对象通过传参进入到一个处理方法内a(),通过这个方法进行逻辑处理,但是后面又有一个类B和上一个类A的处理逻辑一模一样,但是是不同的类,而且这两个类没有任何包含继承之类的关系,那这时候需要再写一个和之前的方法a()一模一样的逻辑的方法b()处理类B,但是这样这两个处理方法就冗余了,然后我就想着写泛型方法来处理,一个方法处理两个甚至多个类的对象,但是后来发现有问题,就是泛型方法内部需要调用这两个不用类对象的不同方法,这时就无法处理了,因为这两个类没关系而且不一样,那如果写死泛型方法中T的对象的调用方法,那还是只能给一个类用,无法通用,后来尝试通过反射根据传入的T去动态的调用传入的类A/B的特有方法,也不行,请问各位有啥好的办法吗?
对于每个类的方法都不一样的情况下,可以使用策略模式,根据不同的类使用各自的策略。
对于你想处理的类如果有相似之处,可以提取出一个公共的抽象类或者接口,然后使用这个抽象类或接口去做处理,各个子类都可以传入。
方法1.如果你的类A和类B高度相似但没有继承关系
你可以定义一个基类O,让A和B都继承O
方法2.定义接口,让A和B都实现同一个接口
这样你的公共函数只需要处理它们相同的部分,而不同的部分由类内部的接口函数自行处理
除非你的业务非常复杂 不然建议还是直接分开写 非要写在一起参考下面这段
public static void classTest(Object tClass) {
if (tClass instanceof a) {
try {
Method method = tClass.getClass().getMethod("sun");
try {
method.invoke(new a(), null);
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
} else if (tClass instanceof b) {
try {
Method method = tClass.getClass().getMethod("sun1");
try {
method.invoke(new b(), null);
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
public static class a {
public void sun() {
System.out.println("11");
}
}
public static class b {
public void sun1() {
System.out.println("222");
}
}