В зависимости от того, что вы делаете (недостаточно информации), вы можете сделать что-то вроде этого:
interface Foo
{
void foo();
}
class FakeFoo
implements Foo
{
public void foo()
{
// do nothing
}
}
class RealFoo
{
public void foo()
{
// do something
}
}
и затем предоставьте класс для абстрагирования экземпляра:
class FooFactory
{
public static Foo makeFoo()
{
final String name;
final FooClass fooClass;
final Foo foo;
name = System.getProperty("foo.class");
fooClass = Class.forName(name);
foo = (Foo)fooClass.newInstance();
return (foo);
}
}
Затем запустите Java с -Dfoo.name = RealFoo | FakeFoo
Игнорируется обработка исключений в методе makeFoo, и вы можете сделать это другими способами ... но идея та же.
Таким образом, вы компилируете обе версии подклассов Foo и позволяете разработчику выбирать во время выполнения то, что они хотят использовать.