我有以下内容:

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())。

您可以为此使用反射...但是,对于CustomPlayerCurrentPlayer具有一个通用的超类(或接口),会不会更简单?

例如,假设CustomPlayerCurrentPlayer都具有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()您可以在接口上调用任何方法。

08-05 13:56