2012-07-11 52 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