如何把2个参数不同逻辑相同的方法改造成1个方法

问题来源:https://www.oschina.net/question/3744526_2318802?utm_source=new_idx

关于泛型可查看这篇文章:Java 泛型详解,看过立刻明白Java泛型知识
如何把2个参数不同逻辑相同的方法改造成1个方法_第1张图片

package com.proxy;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public class Test {
     
	
	
    public static void main(String[] args) {
     
    		List<Demo1> list1 = new ArrayList<Demo1>();
    		List<Demo2> list2 = new ArrayList<Demo2>();
    		for(int i=0;i<10;i++) {
     
    			Demo1 demo1 = new Demo1();
    			demo1.setPatentId(i+"");
    			
    			Demo2 demo2 = new Demo2();
    			demo2.setPatentId(i+"");
    			
    			list1.add(demo1);
    			list2.add(demo2);
    		}
    		dataNode(list1,"1");
    		dataNodeAction(list2,"2");
    		System.out.println("实现接口后的方法=====================");
    		dataNodeHandle(list1, "1");
    		dataNodeHandle(list2, "2");
    }
    
    /**
     * 仿原方法
     * @param list
     * @param patentId
     * @return
     */
    public static List<Map<String, Object>> dataNode(List<Demo1> list,String patentId){
     
    	List<Map<String, Object>> tree = new ArrayList<>();
    	for (Demo1 s : list) {
     
			if(patentId.equals(s.getPatentId())) {
     
				Map<String, Object> treeMap = new HashMap<String, Object>();
				treeMap.put("s",s);
				tree.add(treeMap);
				System.out.println("dataNode="+s.toString());
			}
		}
    	return tree;
    }
    
    
    /**
     * 仿原方法
     * @param list
     * @param patentId
     * @return
     */
    public static List<Map<String, Object>> dataNodeAction(List<Demo2> list,String patentId){
     
    	List<Map<String, Object>> tree = new ArrayList<>();
    	for (Demo2 s : list) {
     
			if(patentId.equals(s.getPatentId())) {
     
				Map<String, Object> treeMap = new HashMap<String, Object>();
				treeMap.put("s",s);
				tree.add(treeMap);
				System.out.println("dataNodeAction="+s.toString());
			}
		}
    	return tree;
    }
    
    /**
     * 改造后 list的参数必须是指定接口的实现类
     * @param list
     * @param patentId
     * @return
     */
    public static List<Map<String, Object>> dataNodeHandle(List<? extends Demo> list,String patentId){
     
    	List<Map<String, Object>> tree = new ArrayList<>();
    	for (Demo s : list) {
     
			if(patentId.equals(s.getPatentId())) {
     
				Map<String, Object> treeMap = new HashMap<String, Object>();
				treeMap.put("s",s);
				tree.add(treeMap);
				System.out.println("dataNodeHandle="+s.toString());
			}
		}
    	return tree;
    }
     
}

/**
 * 实体类1
 * @author xxdz
 *
 */
class Demo1 implements Demo{
     
	
	String patentId;
	
	public String getPatentId() {
     
		return patentId;
	}

	public void setPatentId(String patentId) {
     
		this.patentId = patentId;
	}

	@Override
	public String toString() {
     
		return "Demo1 [patentId=" + patentId + "]";
	}

	
}

/**
 * 实体类2
 * @author xxdz
 *
 */
class Demo2 implements Demo{
     
	String patentId;
	public String getPatentId() {
     
		return patentId;
	}

	public void setPatentId(String patentId) {
     
		this.patentId = patentId;
	}

	@Override
	public String toString() {
     
		return "Demo2 [patentId=" + patentId + "]";
	}
	
}

/**
 * 需要实现的接口
 * @author xxdz
 *
 */
interface Demo {
     
	String patentId = "";
	public String getPatentId();
	public void setPatentId(String patentId);
	public String toString();
}

结果:

dataNode=Demo1 [patentId=1]
dataNodeAction=Demo2 [patentId=2]
实现接口后的方法=====================
dataNodeHandle=Demo1 [patentId=1]
dataNodeHandle=Demo2 [patentId=2]

你可能感兴趣的:(java,接口,java)