我有以下内容:
public class Notifier{
CustomPlayer mCustomPlayer;
CurrentPlayer mCurrentPlayer;
}
public class MainActivity extends Activity{
public void onCreate(){
Notifier ntf = new Notifier();
if( index == 0){
ntf.mCustomPlayer = new CustomPlayer(this);
}
else{
ntf.mCustomPlayer = new CurrentPlayer(this); // having problem here
}
}
}
在Notifier类中,我只想让一个对象mCustomPlayer在MainActivity类中的CustomPlayer和CurrentPlayer之间切换。
我尝试在Notifier类中添加以下内容,
public class Notifier{
CustomPlayer mCustomPlayer;
CurrentPlayer mCurrentPlayer;
public Object getType(int index) {
if (index == 1) {
return CurrentPlayer.class;
}
else {
return CustomPlayer.class;
}
}
}
这样,尝试在MainActivity类中初始化mCustomPlayer时遇到问题。
ntf.mCustomPlayer = new (ntf.mCustomPlayer)getType(0); // compile error
有没有办法实现这一目标?
自从我尝试配置正确的实现以来已经过了一天。
在这种情况下应该使用接口吗?
最佳答案
要使用new
关键字,您必须提供一个类(即new MyClass()
)。
您可以为此使用反射...但是,对于CustomPlayer
和CurrentPlayer
具有一个通用的超类(或接口),会不会更简单?
例如,假设CustomPlayer
和CurrentPlayer
都具有playOne()
和playTwo()
方法。然后,您可以定义:
public interface Player {
void playOne();
void playTwo();
}
public class CurrentPlayer implements Player {
@Override
public void playOne() {
// code
}
@Override
public void playTwo() {
// code
}
}
private class CustomPlayer implements Player {
@Override
public void playOne() {
// code
}
@Override
public void playTwo() {
// code
}
}
public class Notifier {
Player mPlayer;
}
然后为
mPlayer
分配new CurrentPlayer()
或新的CustomPlayer()
您可以在接口上调用任何方法。