如何在java方法中使用动态代码?
我有几乎冗余的java方法。这些方法的主体总是相同的。只有一个或两个java表达式(java代码行)不同。我想对这些几乎冗余的方法进行代码重构,但我正在寻找最好的方法。这并不容易,因为动态代码行 以下三种方法具有相同的主体,但其中包含动态java代码:如何在java方法中使用动态代码?,java,dynamic,methods,redundancy,Java,Dynamic,Methods,Redundancy,我有几乎冗余的java方法。这些方法的主体总是相同的。只有一个或两个java表达式(java代码行)不同。我想对这些几乎冗余的方法进行代码重构,但我正在寻找最好的方法。这并不容易,因为动态代码行 以下三种方法具有相同的主体,但其中包含动态java代码: public static final boolean doSomething1() { Date date = new Date(); long currentTime = date.getTime(); long ma
public static final boolean doSomething1() {
Date date = new Date();
long currentTime = date.getTime();
long maxTime = currentTime + (TIMEOUT * 1000);
while (currentTime < maxTime) {
try {
//START OF MY DYNAMIC CODE
//example 1
for (WebElement element : list) {
if (element.isDisplayed()) {
element.click();
return true;
}
}
//END OF MY DYNAMIC CODE
}
catch (Exception e) {
LOG.error("exception");
}
currentTime = new Date().getTime();
}
return false;
}
public static final boolean doSomething2() {
Date date = new Date();
long currentTime = date.getTime();
long maxTime = currentTime + (TIMEOUT * 1000);
while (currentTime < maxTime) {
try {
//START OF MY DYNAMIC CODE
//example 2
for (WebElement webElement : webElementList) {
WebElement parent = getParentElement(webElement);
}
return true;
//END OF MY DYNAMIC CODE
}
catch (Exception e) {
LOG.error("exception");
}
currentTime = new Date().getTime();
}
return false;
}
public static final boolean doSomething3() {
Date date = new Date();
long currentTime = date.getTime();
long maxTime = currentTime + (TIMEOUT * 1000);
while (currentTime < maxTime) {
try {
//START OF MY DYNAMIC CODE
//example 3
for (WebElement element : list) {
if (element.isDisplayed() && element.getText().equalsIgnoreCase(size))
return true;
}
//END OF MY DYNAMIC CODE
}
catch (Exception e) {
LOG.error("exception");
}
currentTime = new Date().getTime();
}
return false;
}
public静态最终布尔值doSomething1(){
日期=新日期();
long currentTime=date.getTime();
长最大时间=当前时间+(超时*1000);
而(currentTime
那么,如何编写一个有机会设置代码动态行的方法呢?传递一个布尔参数,该参数的值是
X==true
的第一个操作数(更容易写成X
):
您有几个选择:
if (true == true)
使用:
你可以用这个
使用as策略的示例:
private static boolean doSomethingHelper(BooleanSupplier checker) {
Date date = new Date();
long currentTime = date.getTime();
long maxTime = currentTime + (TIMEOUT * 1000);
while (currentTime < maxTime) {
try {
if (checker.getAsBoolean())
return true;
}
catch (Exception e) {
LOG.error("exception");
}
currentTime = new Date().getTime();
}
return false;
}
public static boolean doSomething1() {
return doSomethingHelper(() -> true);
}
public static boolean doSomething2() {
return doSomethingHelper(() -> false);
}
public static boolean doSomething3() {
return doSomethingHelper(() -> {
System.out.println("test");
return true;
});
}
private静态布尔doSomethingHelper(布尔供应商检查器){
日期=新日期();
long currentTime=date.getTime();
长最大时间=当前时间+(超时*1000);
而(currentTimetrue);
}
公共静态布尔值doSomething2(){
返回doSomethingHelper(()->false);
}
公共静态布尔值doSomething3(){
回程剂量仪(()->{
系统输出打印(“测试”);
返回true;
});
}
这只是一个简单的例子来说明我的问题。我的真实代码不一样;)@Martin试着第一次问你想要回答的问题。我们的代码中哪一部分应该是“动态的”?没有办法使if(false==true)
动态。您唯一能做的就是使if语句中的条件成为动态的。但在上一次考试中,有两条动态线System.out.println(“test”);如果(“test”.equals(“test”))
,这根本不起作用。我更改了代码,以便更清楚地说明我的意思。
abstract class DynamicImpl {
protected abstract boolean doSomethingImpl();
public final boolean doSomething() {
Date date = new Date();
long currentTime = date.getTime();
long maxTime = currentTime + (TIMEOUT * 1000);
while (currentTime < maxTime) {
try {
if (doSomethingImpl()) {
return true;
}
}
catch (Exception e) {
LOG.error("exception");
}
currentTime = new Date().getTime();
}
return false;
}
}
private static final DynamicImpl d1 = new DynamicImpl() {
protected boolean doSomethingImpl() {
return true;
}
};
private static final DynamicImpl d2 = new DynamicImpl() {
protected boolean doSomethingImpl() {
return false;
}
};
private static final DynamicImpl d3 = new DynamicImpl() {
protected boolean doSomethingImpl() {
System.out.println("test")
return true;
}
};
public static final boolean doSomething1() {
return d1.doSomething();
}
public static final boolean doSomething2() {
return d2.doSomething();
}
public static final boolean doSomething3() {
return d3.doSomething();
}
private static boolean doSomethingHelper(BooleanSupplier checker) {
Date date = new Date();
long currentTime = date.getTime();
long maxTime = currentTime + (TIMEOUT * 1000);
while (currentTime < maxTime) {
try {
if (checker.getAsBoolean())
return true;
}
catch (Exception e) {
LOG.error("exception");
}
currentTime = new Date().getTime();
}
return false;
}
public static boolean doSomething1() {
return doSomethingHelper(() -> true);
}
public static boolean doSomething2() {
return doSomethingHelper(() -> false);
}
public static boolean doSomething3() {
return doSomethingHelper(() -> {
System.out.println("test");
return true;
});
}