2012-09-05 59 views
0

看看这个类的Java:抽象泛型类和方法重载为了

abstract class LolCat<T> { 
    T execute() throws Err, Arr { 
     T lol = doSomething(); 
     if (lol == null) 
      lol = doSomething(); 

     return lol; 
    } 

    abstract T doSomething(); 
    abstract T doSomething() throws Err, Arr; 
} 

现在我们在一些有一个匿名实现任何方法的地方,这样

final UhmLetsSayCat cat = new ImplLolCat<UhmLetsSayCat>() { 
    @Override 
    UhmLetsSayCat doSomething() { 
     return null; // somehow a UhmLetsSayCat is returned for real sometimes null 
    } 

    @Override 
    UhmLetsSayCat doSomething() throws Err,Arr { 
     return null; // really it does right thing, whatever 
    } 
}.execute(); 

现在我的问题的LolCat的是,第一次调用doSomething()的方法不会抛出Err,Arr,而是第二次调用,如果lol为null,则运行抛出Err,Arr的doSomething实现。如何区分哪些方法运行!?

编辑:错误报警。我的天啊。我一定是整个晚上都失明了,其实有些方法的名字实际上不一样,他们叫querryAll和QuerryAl1,我会找到那个做他并且打他的人。

编辑2:谢谢大家。

+3

它不编译。我的猜测是,在你的真实代码中,方法签名(名称或参数)是不同的。 –

+0

这是我编译的类。它实际上是一个抽象类LolCat 里面的一个公共类的东西。这有什么区别吗?匿名实现在Something中的方法中。 – rapadura

+0

借调。我得到'已经定义...' –

回答

6

您不能在类中声明两个具有相同签名的方法。 throws子句,注释和返回类型不计数。

abstract T doSomething(); 
abstract T doSomething() throws Err, Arr; // won't compile 

如果这样编译,编译器会有一个错误。

1

你甚至不应该能够编译这个例子(错误:重复的方法doSomething()):在类型LolCat 重复的方法DoSomething的()

+0

对不起,但这是评论,而不是解决方案 – Pshemo

+0

在我看来这是一个解决方案,因为问题甚至不存在 –

+0

好吧,看着它,你可能是对的。我的扭曲逻辑“如果没有真正的问题在第一个地方 - >没有真正的解决方案”失败了我:) – Pshemo