R4j*_*R4j 6 java android design-patterns
我正在寻找一种方法将一些方法添加到存在的类中,如下所示:
String s = "";
s.doSomething();
Run Code Online (Sandbox Code Playgroud)
在目标C中,我可以使用类别来执行此操作.
@interface NSString( Stuff)
-(void)doSomething();
@end
Run Code Online (Sandbox Code Playgroud)
android有这样的东西吗?还是另一个黑客?
更新:实际上,我遇到了这个问题:我从jar文件中使用了一个类(不是final)(所以,我无法触及它的源代码).然后我想在不使用继承的情况下将方法(或类似的东西)添加到这个类中.例如:
public class Provider{
// many methods and fields go here...
public String getName(){}
}
Run Code Online (Sandbox Code Playgroud)
我想做的就是:
provider.print(); //that call getName() method;
Run Code Online (Sandbox Code Playgroud)
我也试过代理模式,它有效,但我不喜欢这种方式(因为它像一个包装类,我必须存储一个具有许多字段和方法的对象,只使用一个方法):
public class ProxyProvider{
Provider provider;
public ProxyProvider(Provider provider){
this.provider = provider;
}
public void print(){
String name = provider.getName();
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以解决这个问题吗?
您可以使用静态方法创建一个实用程序类:
public final class ProviderUtils {
private ProviderUtils() {} // not instantiable, it is a utility class
public static void print(Provider provider) {
String name = provider.getName();
// print the name
}
}
Run Code Online (Sandbox Code Playgroud)
在您的代码中,您可以调用它:
Provider p = new Provider(...);
ProviderUtils.print(p);
Run Code Online (Sandbox Code Playgroud)
如果该类只有一个print方法,您也许可以调用它ProviderPrinter而不是ProviderUtils.
最后你不会有成千上万的可能性 - 你可以:
| 归档时间: |
|
| 查看次数: |
1410 次 |
| 最近记录: |