gpt4 book ai didi

java - 如何重用java代码块

转载 作者:行者123 更新时间:2023-11-29 04:48:53 25 4
gpt4 key购买 nike

我想重用 java 代码块。

这是完整的代码块:

    Session session = HibernateUtil.getSessionFactory().openSession();
try {
session.beginTransaction();

// begin of different part
Criteria criteria=session.createCriteria(Table.class);
if(filters!=null)
createFilter(criteria, filters, null,null);
long count=(long)criteria.setProjection(Projections.rowCount()).uniqueResult();
this.setRowCount((int) count);
// end of different part

session.getTransaction().commit();
} catch (HibernateException e) {
if(session.getTransaction()!=null)
session.getTransaction().rollback();
e.printStackTrace();
} finally {
session.flush();
session.close();
}
}

我需要使用 block :

    Session session = HibernateUtil.getSessionFactory().openSession();
try {
session.beginTransaction();

        session.getTransaction().commit();
} catch (HibernateException e) {
if(session.getTransaction()!=null)
session.getTransaction().rollback();
e.printStackTrace();
} finally {
session.flush();
session.close();
}
}

在不同的类(class)多次。但是中间部分会有所不同。有什么办法吗?

最佳答案

我将根据您的代码的精简版本制作一个示例,这样它就可以在没有 Hibernate 的情况下工作。

原代码:

public class MyClass {
private int rowCount;

public void doStuff() {
Object session = new Object();

try {
session.getClass(); // represents session.getTransaction();

// begin of different part
String s = session.toString();
System.out.println(s);
this.setRowCount(5);
// end of different part

session.getClass(); // represents commit
} catch (Exception e) {
e.printStacktrace();
} finally {
System.out.println("Do some cleanup");
}
}

public void setRowCount(int count) {
rowCount = count;
}
}

这将从其他地方调用为:

MyCLass obj = new MyClass();
obj.doStuff();

现在进行更改。我将使用 lambda 表达式并定义一个带有注释 @FunctionalInterfaceinterface。这是因为接口(interface)中的apply方法会返回一个Exception。 Java 8 中的标准功能接口(interface)不支持这一点。

首先是新界面:

@FunctionalInterface
public interface MyFunction {
void apply(Object session, MyClass self) throws Exception;
}

现在对原代码的改动:

改变自

    public void doStuff() {

    public void doStuff(MyFunction func) {

删除标记为不同代码的部分并将其替换为:

    func.apply(session, this);

电话来自:

obj.doStuff();

obj.doStuff((session, self) -> {
String s = session.toString();
System.out.println(s);
self.setRowCount(5);
});

如果 Java 8 不是一个选项,请删除界面中的 @FunctionalInterface。然后像这样调用 doStuff():

obj.doStuff(new MyFunction() {
@Override
public void apply(Object session, MyClass self) throws Exception {
String s = session.toString();
System.out.println(s);
self.setRowCount(5);
}
});

关于java - 如何重用java代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36176694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com