2016-09-21 1 views
1

Lets sagen, ich habe:Grenze Methoden einer Klasse nur diejenigen einer Schnittstelle

public interface IFoo{ 
    public void bar(); 
} 

und

public class Foo implements IFoo{ 
    public void bar(){ 
     //bar... 
    } 
} 

Aber IFoo ist neu und Foo ist das einzige, was es für jetzt implementiert.

Ich möchte sicherstellen, dass jemand anderes nicht versehentlich zusätzliche Methoden zu Foo hinzufügt, ohne sie auch zu IFoo hinzuzufügen.

Gibt es trotzdem, um dies in Java zu gewährleisten?

+1

Sie könnten einen Test mit Reflexionen schreiben, der fehlschlägt, wenn eine Klasse, die IFoo implementiert, eine (öffentliche) Methode hat, die nicht Teil von IFoo ist. – Kuchi

+6

Dies ist unnötig einschränkend. –

+1

Wenn Sie nur mit der Schnittstelle im Rest Ihrer Codebasis codieren, wird alles, das zu 'Foo' und nicht'IFoo' hinzugefügt wird, nicht sichtbar sein. Es wird die Leute nicht davon abhalten, Dinge nur zu "Foo" hinzuzufügen, aber sie werden es sehr schnell bemerken, wenn sie versuchen, sie zu benutzen ... – azurefrog

Antwort

1

Lesen Sie beim Programmstart die Klassendefinition mithilfe der Reflektion und von dort können Sie die in der Klasse definierten Methoden abrufen. Wenn Sie eine andere Methode finden, werfen Sie eine Ausnahme auf.

Class aClass = ...//obtain class object 
Method[] methods = aClass.getMethods(); 

Eine andere Möglichkeit wäre Zeit Anmerkungen zu verwenden, kompilieren: https://www.javacodegeeks.com/2015/09/java-annotation-processors.html Aber jemand könnte Ihre benutzerdefinierte Anmerkung aus der Klasse Code entfernen.

Verwandte Themen