小编nho*_*er9的帖子

无法使用常规Class实例化类型

所以我有一节课:

public class DynQSimModule<T extends Mobsim> extends AbstractModule
{

   private Class<? extends javax.inject.Provider<? extends T>> providerClass;

   public DynQSimModule(Class<? extends javax.inject.Provider<? extends T>> providerClass)
   {
    this.providerClass = providerClass;
   }

   //some methods down here
}
Run Code Online (Sandbox Code Playgroud)

当我试着打电话时:

controler.addOverridingModule(new DynQSimModule<>(AMoDQSimProvider.class));
Run Code Online (Sandbox Code Playgroud)

Eclipse告诉我它"无法推断DynQSimModule <>的类型参数.我明白这是因为我没有在<>中添加任何内容,但我构建的示例代码使用相同的语法并且运行完全正常...

当我输入类似的东西:

controler.addOverridingModule(new DynQSimModule<? extends Mobsim(AMoDQSimProvider.class));
Run Code Online (Sandbox Code Playgroud)

Eclipse告诉我:"无法实例化DynQSimModule类型."

我知道当你尝试实例化一个接口或抽象类时这是一个问题,但DynQSimModule既不是那些......

任何帮助都会很棒.

谢谢!

java eclipse generics type-inference

5
推荐指数
1
解决办法
565
查看次数

如何在减少代码重复的情况下为游戏添加Levels?

我正在设计一个多层次的游戏.我有一个安装类,它根据收到的参数设置电路板,它指示应该设置的电平.这是班级:

public class BoardState {
    public BoardState(InitialState state) {
        switch (state) {
            case EMPTY:
                setupEmptyState();
                break;
            case INTEGRATIONTEST:
                setupIntegrationTestState();
                break;
            case LEVEL_1:
                setupLevelOne();
                break;
            case LEVEL_2:
                setupLevelTwo();
                break;
            default:
                throw new Error("Invalid level selection");
        }
    }

    private void setupEmptyState() { }

    private void setupIntegrationTestState() { }

    private void setupLevelOne() { }

    private void setupLevelTwo() { }
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但每次我添加一个新的级别我必须在三个地方添加代码:InitialState enum它定义接受状态的列表,switch构造函数中的语句,以及类的主体,我必须添加一个方法设置有问题的级别.

我想要保留的一件好事是,我的GUI会根据enum定义级别列表自动填充我添加的每个级别的新按钮.

如何重构此代码,以便减少与添加新级别相关的开销?

java oop design-patterns code-duplication

5
推荐指数
1
解决办法
1209
查看次数

Android Studio 音乐播放器无法从 SD 卡读取,只能从内部存储器读取

如果这被证明是一个愚蠢的问题,我深表歉意,这可能是一个快速解决方案,但我就是无法弄清楚。我正在 android studio 中构建一个音乐播放器,尽管我确实实现了 getExternalStorageDirectory() 并在清单文件中添加了权限,但 sdcard 上的所有歌曲都不会显示在列表视图中,只有内部存储器中的歌曲。对此的任何意见或建设性批评都将受到高度赞赏。这是主要的 java 类。

public class MainActivity extends AppCompatActivity {

    ListView lv;
    String[] items;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.lvPlayList);

        //---------------------------------------------> V HERE V <-------------------------

        final ArrayList<File> mySongs = findSongs(Environment.getExternalStorageDirectory());
        //----------------------------------------------------------------------------------
        items = new String[ mySongs.size() ];

        for(int i = 0; i<mySongs.size(); i++) {
            toast(mySongs.get(i).getName().toString());
            items[i] = mySongs.get(i).getName().toString().replace(".mp3", "").replace(".wav", "");
        }

        ArrayAdapter<String> adp = new ArrayAdapter<>(getApplicationContext(), R.layout.song_layout, R.id.textView, items);
        lv.setAdapter(adp);
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, …
Run Code Online (Sandbox Code Playgroud)

java listview audio-player android-sdcard android-studio

3
推荐指数
1
解决办法
4453
查看次数

为什么大多数编程语言都不接受逗号?

为什么我们不能写

int n=1,000;
Run Code Online (Sandbox Code Playgroud)

为什么编程语言不允许使用逗号?如果允许使用逗号,我们会遇到任何麻烦吗?

syntax programming-languages numbers

3
推荐指数
1
解决办法
67
查看次数

方向始终为纵向(libgdx中的运动控制)

我的代码如下:

Input.Orientation orientation = Gdx.input.getNativeOrientation();
message = "";
switch (orientation) {
    case Landscape:
        message += "Landscape\n";
        break;
    case Portrait:
        message += "Portrait\n";
        break;
    default:
        message += "Whatever\n";
}
Run Code Online (Sandbox Code Playgroud)

上面的代码(内部渲染方法)总是表示设备处于纵向模式,即使我旋转设备!我究竟做错了什么?如何准确检测设备是处于纵向还是横向模式?

java android orientation libgdx

3
推荐指数
1
解决办法
456
查看次数

如何为单元测试提供HttpWebResponse.GetResponseAsync()?

我被指派为我无权修改的应用程序编写单元测试.我想要单元测试的方法进行如下调用:

HttpWebResponse response = await request.GetResponseAsync() as HttpWebResponse;
Run Code Online (Sandbox Code Playgroud)

我在这个项目中使用过Microsoft Fakes进行了数以千计的其他测试,所以我想我会在这里做同样的事情.在我看来,最简单,最干净的解决方案是使用该request.GetResponseAsync()方法.然后我可以返回一些虚假内容并确保该方法正确处理它而不实际发出请求.

GetResponseAsync()返回一个Task<WebResponse>对象.所以我通常会这样做:

using (ShimsContext.Create())
{
    System.Net.Fakes.ShimWebRequest.AllInstances.GetResponseAsync = (x) =>
    {
        return new Task<WebResponse>(() =>
        {
            HttpWebResponse toRet = new HttpWebResponse();
            return toRet;
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是上面没有编译因为

'System.Net.HttpWebResponse.HttpWebResponse()'已过时:'此API支持.NET Framework基础结构,不能直接在您的代码中使用.

我知道这种类型已经过时,我们现在应该使用不同的东西,但我试图测试的遗留代码不允许我这么奢侈.我已经看过很多关于这个主题的问题,但似乎没有人回答这个问题.

c# unit-testing mocking httpwebrequest microsoft-fakes

1
推荐指数
1
解决办法
749
查看次数

用Java覆盖属性

在Java中,我最近有几个项目,我使用这样的设计模式:

public abstract class A {
 public abstract int getProperty();
}

public class B extends A {
 private static final int PROPERTY = 5;

 @Override
 public int getProperty() {
  return PROPERTY;
 }
}
Run Code Online (Sandbox Code Playgroud)

然后我可以getProperty()在类的任何成员上调用抽象方法A.但是,这似乎不实用 - 似乎应该有一些方法来简单地覆盖属性本身,以避免getProperty()在每个扩展的类中重复该方法A.

像这样的东西:

public abstract class A {
 public static abstract int PROPERTY;
}

public class B extends A {
 @Override
 public static int PROPERTY = 5;
}
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?如果是这样,怎么样?否则,为什么不呢?

java oop abstract-class overriding

1
推荐指数
1
解决办法
5761
查看次数

如何打印以逗号分隔的字典

假设我们有一本字典

dict = { 'Dollar': 12, 'Half-Coin': 4, 'Quarter': 3, 'Dime': 7 }
Run Code Online (Sandbox Code Playgroud)

我将如何打印代码,使其看起来像:

12 美元、4 半硬币、3 角硬币、7 角硬币

python formatting dictionary

0
推荐指数
1
解决办法
4401
查看次数