2012-07-11 78 views
2

我想知道是否有辦法阻止一個類使用方法,但讓另一個使用方法取決於它們的擴展。我們可以說class1實現了Plugin,class2實現了Mod,是否有可能允許class2使用load()方法。但停止使用它的class1方法使用限制

+0

除了檢查調用者類型之外,這很難做到。但通常情況下,這也不是必要的。如果你告訴我們上下文,也許我們可以提出更好的解決方案。 – Jochen 2012-07-11 19:14:39

+0

您可以重載該方法並使受限制的方法版本不執行任何操作。 – Keppil 2012-07-11 19:44:53

回答

1

也許你可以將調用者的類型傳遞給該方法,然後使用instanceof comparison operator。例如:

public void myMethod(Object obj){ 
    if(obj instanceof Mod){ 
     \\ do something 
    } else if(obj instanceof Plugin){ 
     \\ do not permit 
    } 
} 
-1

使用的instanceof檢查實例的類型,然後給它的權限的方法。

Class1 c1 = new Class1(); 
Class2 c2 = new Class2(); 

doIt(c1); 
doIt(c2); 

public void doIt(Object obj){ 

    if (obj instanceof Class2){ 

     myRestrictedMethod(); 

    } 


} 
+0

我不喜歡這樣做的想法,這可能會導致安全問題 – 2012-07-11 19:05:26

+0

如果您可以指出您的安全問題 – 2012-07-11 19:06:28

+0

如果通過反射調用東西,此解決方案將不起作用。檢查必須在受限制的方法中進行。 – Jochen 2012-07-11 19:13:14