我有一个实现接口的类,其中一个方法叫做onClick。有没有办法实现接口想要的onClick,但是将其命名为其他东西?像(我正在做的):
public void AnyMethodNameIWant() implements Interface1.onClick
我要问的三个原因是:
道歉,如果这是一个基本上“坏”的问题,因为我不熟悉Java。
答案 0 :(得分:6)
你可以使用@Override
注释和接口实现(从Java 6开始),这有助于澄清这是一种不能随意重命名的方法。
第二个问题的一个选项可能是创建一个实现类只是,目的是转发对更具体方法的调用。您可能希望将此作为嵌套甚至匿名类。我不确定我通常这样做。
编辑:看过第三个问题 - 不,如果你在Java中有两个具有相同方法签名的接口,你只能提供一个实现:(哦,如果你有两个具有相同签名但不同的接口返回类型,甚至更糟。你总是可以写一个Interface1 getInterface1()
方法,它将一个代理Interface1
方法的匿名内部类的实例返回到“main”类。
答案 1 :(得分:2)
不。
你唯一能做的就是添加一个实现界面的阴影方法并调用你的方法。
public class MyClass implements Interface1 {
public void AnyMethodNameIWant() { ...; }
public void onClick() { AnyMethodNameIWant(); }
}
答案 2 :(得分:2)
这两点
- 要避免像onClick这样的“通用”名称,接口可能要求我拥有
- 区分许多接口中的相同方法名称
通常使用 Adapter Pattern 解决。
interface IFoo {
void onClick();
void onChange();
}
class MyImpl {
void doSomething(){
// real code for onClick
}
void doSomethingElse(){
// real code for onChange
}
IFoo getFooAdapter(){
return new IFoo() {
@Override
public void onClick() {
doSomething();
}
@Override
public void onChange() {
doSomethingElse();
}
};
}
}
基本上,您创建了一个中间步骤,将所有对任何接口方法的调用转发给实际实现。
命名和签名可能有所不同。如果需要,您还可以为不同的接口提供不同的适配器(或者如果两个接口都具有不同行为的竞争方法,则必须提供)。
如何分发适配器实例有很多可能性 - 在某些情况下每次创建一个新实例可能并不明智。
当然,这种模式不仅仅是为了好玩而只是为了最小化和干净的代码而实现的。但它可以解决实际问题。
答案 3 :(得分:1)
您无法重命名该方法,但您可以定义这两种方法(onClick
和anyMethodNameIWant
)并让onClick
只需调用您的其他方法。
@Override
public void onClick() {
anyOtherMethodNameIWant();
}
答案 4 :(得分:1)
您当然可以使用其他方法,使用不同的名称指向相同的实现,以获得您想要的命名。
public void interfaceMethodA(){
// some implementation here
}
public void AnyMethodNameIWant(){
interfaceMethodA();
}