Если вам нужно позвонить на обоих, вам нужно добавить его в свой интерфейс. Вполне возможно, что вы не хотите использовать toString () для него, поскольку предполагается, что toString () должно быть удобочитаемым представлением.
class Nay1 {
String someCrazyMethod() { return "ugh"; }
}
class Nay2 {
String someRandomMethod() { return "ook"; }
}
Ну, это отстой. Вы не хотели бы, чтобы Nay1 оук, или Nay2, чтобы тьфу. Но вам нужно что-то равномерное!
интерфейс NayInterface {
String nayRepresentation();
}
И ваши новые классы:
class Nay1 implements NayInterface {
String someCrazyMethod() { return "ugh"; }
public String nayRepresentation() { return someCrazyMethod(); }
}
class Nay2 implements NayInterface {
String someRandomMethod() { return "ook"; }
public String nayRepresentation() { return someRandomMethod(); }
}
Теперь, несмотря ни на что, вы можете позвонить myNayInterface.nayRepresentation();
, чтобы получить строковое представление, соответствующее соответствующему классу, без выполнения приведения.
class ActuallyDoesSomething<T extends NayInterface> {
String foo;
public ActuallyDoesSomething(T t) {
this.foo = t.nayRepresentation();
}
public String foo() { return foo; }
}
Очевидно, что если вы хотите использовать toString () вместо nayRepresentation, вы можете сделать это. Но это позволит вам не использовать toString и сохранять его вместо этого для целей отладки.