Я использую библиотеку классов Java, которая во многих отношениях является неполной: есть много классов, в которые, по моему мнению, должны быть встроены дополнительные функции-члены. Однако я не уверен в лучшей практике добавления этих функций-членов. 1001 *
Позволяет назвать недостаточный базовый класс A
.
class A
{
public A(/*long arbitrary arguments*/)
{
//...
}
public A(/*long even more arbitrary arguments*/)
{
//...
}
public int func()
{
return 1;
}
}
В идеале я хотел бы добавить функцию к A
. Однако я не могу этого сделать. Мой выбор между:
class B extends A
{
//Implement ALL of A's constructors here
public int reallyUsefulFunction()
{
return func()+1;
}
}
и
class AddedFuncs
{
public static int reallyUsefulFunction(A a)
{
return a.func()+1;
}
}
На мой взгляд, у них обоих есть свои преимущества и недостатки. Первый вариант дает более чистый синтаксис, чем второй, и он более логичен, но имеет проблемы: допустим, у меня есть третий класс, C
, внутри библиотеки классов.
class C
{
public A func()
{
return new A(/*...*/);
}
}
На мой взгляд, нет простого способа сделать это:
C c;
int useful = c.func().reallyUsefulFunction();
, поскольку тип, возвращаемый C.func()
, является A
, а не B
, и вы не можете понижать рейтинг.
Так каков наилучший способ добавления функции-члена в класс библиотеки только для чтения?