Java 如何将一个具体方法作为参数传递给另一个具体方法

Java 如何将一个具体方法作为参数传递给另一个具体方法,java,methods,arguments,Java,Methods,Arguments,我是java的新手,正在开发一个真实的项目。到目前为止,我有很多方法和大约2500行代码。许多方法稍有不同(通常只是一个标识符的不同),因此我不得不一次又一次地复制代码,并做一些细微的更改。 我想要的是将一个方法作为参数传递给另一个方法,我已经使用了lambda表达式 但由于我自己在概念上的缺陷,我觉得它不够吸引人。因为它告诉我们要定义要传递的每个方法的函数接口。但按照我的想法,它不会给我一个通用代码,这样我将来就可以简单地添加一些其他表 我正在放一段代码来演示和更好地解释我的问题 if(hou

我是java的新手,正在开发一个真实的项目。到目前为止,我有很多方法和大约2500行代码。许多方法稍有不同(通常只是一个标识符的不同),因此我不得不一次又一次地复制代码,并做一些细微的更改。 我想要的是将一个方法作为参数传递给另一个方法,我已经使用了lambda表达式 但由于我自己在概念上的缺陷,我觉得它不够吸引人。因为它告诉我们要定义要传递的每个方法的函数接口。但按照我的想法,它不会给我一个通用代码,这样我将来就可以简单地添加一些其他表

我正在放一段代码来演示和更好地解释我的问题

if(houseTabPanel.getComponentCount()==0){
                     houseTableDb();
                    }
                    if(isSelected){
                        selection(houseTable);
                    }
                    else {
                        houseTable.setColumnSelectionAllowed(false);
                        houseTable.setRowSelectionAllowed(false);
                        houseTable.setCellSelectionEnabled(false);
                        Rselection(houseTable);
                    }
现在我有了不同的方法,名为houseTableDb()、plotTableDb()、adminTableDb()等等。 我想为这段代码创建一个方法,并将plotTableDb()等作为参数传递。。 类似于

public void genericMethod(JPanel p, JTable t, some method reference to use instead of houseTableDb){}

如果我描述得不够详细,请原谅。。任何回应都会得到内心的真正感激

如果所有这些方法都具有相同的签名,则可以使用具有该签名的单个方法(返回值、参数列表)定义接口。然后编写实现该方法的类,每个类对应一个方法的实现。要传递该方法,需要创建该类的对象并传递该对象。对实际方法的调用将替换为对接口中定义的方法的调用

interface Callee {
    void meth();
}
class MethOne implements Callee {
    public void meth(){...}
}

void caller( Callee callee ){
    callee.meth();
}

Callee ofOne = new MethOne();
caller( ofOne );
但为了避免所有这些混乱:这就是为什么添加了lambda…

您可以这样做:

public void genericMethod(JPanel p, JTable t, TableDbCallBack tableDb)
{
    if(p.getComponentCount()==0)
    {
        tableDb.run();
    }
    if(isSelected)
    {
        selection(t);
    }
   else
   {
        t.setColumnSelectionAllowed(false);
        t.setRowSelectionAllowed(false);
        t.setCellSelectionEnabled(false);
        Rselection(t);
    }
}
用法:

genericMethod(p, t, new HouseTableDb());
genericMethod(p, t, new AdminTableDb());
实施:

public interface TableDbCallBack extends Runnable {}

public class HouseTableDb implements TableDbCallBack
{
    @Override
    public void run()
    {
         // Whatever it should do   
    }
} 

public class AdminTableDb implements TableDbCallBack
{
    @Override
    public void run()
    {
         // Whatever it should do   
    }
} 

很感谢您的回复,但是先生,houseTableDb和其他数据库在访问数据库中不同表的方式上是不同的,我只想要一个方法签名,比如//callee(JPanel p,JTable t,一些方法引用来代替houseTableDb){}..我真的很抱歉打扰您(您写:“要使用的某些方法引用…”但这正是我向您展示的:方法引用。碰巧方法引用是对象引用,而对(包装的)方法引用的方法调用是对(包装的)方法引用的调用object的唯一方法。另外,请参阅其他007评论中引用的链接。先生,我如何调用不同的方法而不是houseTableDb(),如plotTableDb()和adminTableDB()等。感谢您的回复。我的错,我误解了这个问题。编辑我的帖子。完成后,应该会对您有所帮助。