java 传递参数类型_传递给Java中的方法时,如何要求参数为两种类型

在一个类中,我必须调用另一个需要两个参数的类的构造函数,即IHelloServiceConnectionObserver和ContextWrapper.问题是他们都是这个.

注意:ContextWrapper是一个我无法控制的框架类(实际上是android.content.ContextWrapper).我的类(一个Android Activity)已经是一个ContextWrapper,我想把它混合一点IHelloServiceConnectionObserverness.

另请注意,我的类是几个都继承自ContextWrapper的类之一,因此组合ContextWrapper和IHelloServiceConnectionObserer将不起作用.

我能做到这一点:

HelloServiceConnection svc = HelloServiceConnection(this,this);

电话

public HelloServiceConnection(IHelloServiceConnectionObserver observer, ContextWrapper contextWrapper){

this.observer = observer;

this.contextWrapper = contextWrapper;

}

但这看起来很傻.或者我可以这样做:

HelloServiceConnection svc = HelloServiceConnection(this);

电话

public HelloServiceConnection(IHelloServiceConnectionObserver observer){

this.observer = observer;

this.contextWrapper = (ContextWrapper) observer;

}

但现在我将一个很好的编译时错误移动到运行时错误.

这里的最佳做法是什么?

编辑:嗯,我不能说这是一个“最佳实践”,但对于我的特殊情况,Jon Skeet有正确的答案.这是代码最终看起来像:

helloServiceConnection = HelloServiceConnection.create(this);

电话

public static HelloServiceConnection create(T value){

return new HelloServiceConnection(value, value);

}

反过来打电话

private HelloServiceConnection(IHelloServiceConnectionObserver observer, ContextWrapper contextWrapper){

this.observer = observer;

this.contextWrapper = contextWrapper;

}

因此,让我更多地说明为什么这是这种特殊情况的正确答案.由于ContextWrapper是我无法控制的框架的一部分,我无法改变它.因为它也是几个类的祖先,其中任何一个我可能想要使用HelloServiceConnection,所以扩展ContextWrapper的所有后代以在IHelloServiceConnectionObserver中添加它是没有意义的.

所以我以为我离开的时候别无选择,只有这个,这个偶像.一旦我理解了乔恩的回答,就可以节省一天的时间!

谢谢,乔恩 – 并感谢所有参与的人.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值