我遇到以下情况:
Operator
,其中包含要实现的方法tweak
; 我的界面
package operators;
public interface Operator
{
public int[] tweak(int[] solution);
}
我的主要课程:
package fsp;
public class FSP {
public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException
{
RandomSwap operator = new RandomSwap();
HillClimb hc = new HillClimb(operator);
}
}
一类“local_search”:
package local_search;
public class HillClimb
{
Object operator;
public HillClimb(Object operator)
{
this.operator = Class.forName(operator.getClass().getName()).newInstance();
}
}
我不知道我的HillClimb构造函数方法是否正确,但我没有编译或运行时错误。
我需要做的是,例如,在我的HillClimb类中:
public void start()
{
int[] s = {1, 2, 3}
operator.tweak(s);
}
如果我实现它,使用我给出的示例,我就不能调用tweak
方法。有办法吗?
OBS :示例不是整个实现。我只保留必要的解释我的疑问。
EDIT1:当我调用operator.tweak(s)
时,编译错误返回:The method tweak(int[]) is undefined for the type Object
答案 0 :(得分:2)
由于您希望HillClimb
构造函数仅将Operator
类作为参数,因此您可以更新其构造函数以将Operator
接口作为参数。
更新
对象运算符;
public HillClimb(Object operator){..}
到
操作员操作员;
公共HillClimb(运营商运营商)
{
this.operator = operator;
}
这样你甚至不需要做Class.forName(...)
并担心 ClassNotFoundException,InstantiationException,IllegalAccessException。
此外,这可以保证对象的类型为Operator
,并且总会有一个调整方法。
使用当前代码,我甚至可以new HillClimb(new String())
,稍后在调用start
方法时会失败。
答案 1 :(得分:1)
将班级中的Object
更改为Operator
,您的所有问题都会消失:
public class HillClimb
{
Operator operator; // <-- Change here
public HillClimb(Operator operator) // <-- Change here
{
this.operator = operator; // <-- Simplify this
}
public void start()
{
int[] s = {1, 2, 3}
operator.tweak(s);
}
}