4

ニーズを満たすためにクラスのアーキテクチャを開発しているときに、このケースに直面しました。サブクラスで実装する必要があるいくつかのメソッドを内部に持つ抽象クラスがありますが、サブクラスでは、最初から継承する署名で実装する必要があることがわかりました。

私が何を意味するかを示すために:

// person class
public abstract class Person
{ 
  protected void abstract workWith(Object o) throws Exception;
}

//developer class
public class Developer extends Person
{// i want to implement this method with Computer parametre instead of Object and throws `//DeveloperException instead of Exception`
 protected void workWith(Computer o) throws DeveloperException
 {
  //some code here lol install linux ide server and stuff 
 }
}

// exception class 
public class DeveloperException extends Exception
{

}

それを行う方法はありますか?ジェネリックで可能かどうかはわかりません。どうもありがとう。

4

1 に答える 1

5

これには間違いなくジェネリックを使用できます。

public abstract class Person<T, U extends Exception> { 
  protected abstract void workWith(T t) throws U;
}

class Developer extends Person<Computer, DeveloperException> {
  protected void workWith(Computer c) throws DeveloperException {
    //implementation code
  }
}

これで目的は達成されますが、これが適切な設計であるかどうかを判断するには、ユース ケースに関するさらに多くの詳細情報が必要です。

于 2013-09-04T16:30:02.737 に答える