2012-01-29 75 views
0

我需要为类创建代理。我无法访问具体的主题,但只能访问主题界面。我也有一个工厂方法来创建原始实现的实例。正则表达式创建代理类

如果我使用Eclipse,我可以得到每一个方法存根:

@Override 
public R1 method(T1 p1) { 
    // TODO Auto-generated method stub 
     return null; 
} 

我需要这样的创建实现:

@Override 
public R1 method(T1 p1) { 
    return instance.method(p1); 
} 

因为有很多的方法,我用正则表达式与搜索和替换。搜索:

public ([a-z,A-Z,\.]*) ([a-z,A-Z]*)\(([a-z,A-Z]* ([a-z,A-Z]*))?\) \{\r\n([ ,\t]*)// TODO Auto-generated method stub\r\n[ ,\t]*return [0-9,a-z,A-Z]*\; 

并将其替换:

public \1 \2\(\3\) \{\r\n\5return instance\.\2\(\4\); 

有没有更好的解决办法?

另一个问题自带了占用更多PARAMS方法:

@Override 
public R1 method(T1 p1, T2 p2) { 
    // TODO Auto-generated method stub 
    return null; 
} 

我发现的唯一的解决办法是有则params的每个号码不同的搜索替换对。有更好的解决方案吗?

+0

您是否避免动态代理,因为开销太多? – biziclop 2012-01-29 20:06:00

回答

1

最简单的解决方案可能只是使用和IDE。例如,在Netbeans的7,你可以编写以下骨架:

public class MyProxy implements SomeInterface { 
    private SomeInterface instance; 

} 

然后你把你的柯森的类里面,打​​和Insert,选择“委托方法”,选择该接口的所有方法,然后单击生成。

另一种更动态的可能性是使用jdk的java.lang.reflect.Proxy类。这允许您在运行时定义一个实现给定接口的类:

+0

对不起,也许我的问题不清楚。虽然你的回答是正确的(并且因为我不知道Netbeans 7的这个特性,所以很有用),但我真正要求的是一个正则表达式。所以它更多的是创建一个正则表达式来做到这一点。因为我以为我会做到这一点,但我没有,所以我想知道是否有人比我更专业的正则表达式可以做到这一点。 – kingston 2012-01-30 09:16:11

+0

好吧,我认为这是一个“我将使用正则表达式,现在我有两个问题”类型的问题:) – 2012-01-30 09:59:49