小编Joh*_*Eye的帖子

接受两种不同类型作为参数的方法

我正在编写一个方法,它应该接受两个类型之一的对象作为其参数,这两个类型不共享除Object之外的父类型.例如,类型是梦想和大蒜.你都可以做dreams.crush()garlic.crush().我想要一个方法utterlyDestroy(parameter),它将接受Dreams和Garlic作为它的参数.

utterlyDestroy(parameter) {
    parameter.crush()
}
Run Code Online (Sandbox Code Playgroud)

Garlic和dream都是某个库的一部分,所以让它们实现一个接口ICrushable(这样我可以写utterlyDestroy(ICrushable parameter))不是一个选项.

我的方法体很长,所以重载就意味着重复代码.丑陋.我相信我可以使用反射并做一些类黑客攻击.丑陋.

我尝试使用泛型,但显然我不能写类似的东西

utterlyDestroy(<T instanceof Dreams || T instanceof Garlic> parameter)
Run Code Online (Sandbox Code Playgroud)

是否有可能将大蒜强加给梦想?

utterlyDestroy(Object parameter) {
    ((Dreams)parameter).crush()
}
Run Code Online (Sandbox Code Playgroud)

但这仍然是丑陋的.我的其他选择是什么?处理这种情况的首选方法是什么?

java generics polymorphism overloading

27
推荐指数
3
解决办法
5万
查看次数

将变量声明为某种类型

假设我们有以下代码块:

if (thing instanceof ObjectType) {
    ((ObjectType)thing).operation1();
    ((ObjectType)thing).operation2();
    ((ObjectType)thing).operation3();
}
Run Code Online (Sandbox Code Playgroud)

所有类型转换使代码看起来很难看,有没有办法在代码块中声明'thing'作为ObjectType?我知道我能做到

OjectType differentThing = (ObjectType)thing;
Run Code Online (Sandbox Code Playgroud)

从那时起开始使用'differentThing',但这会给代码带来一些困惑.有没有更好的方法来做到这一点,可能是这样的

if (thing instanceof ObjectType) {
    (ObjectType)thing; //this would declare 'thing' to be an instance of ObjectType
    thing.operation1();
    thing.operation2();
    thing.operation3();
}
Run Code Online (Sandbox Code Playgroud)

我很确定过去曾问过这个问题,但我找不到它.请随意指出可能的重复.

java casting type-conversion

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

有没有办法按需打印堆栈跟踪?

当我在某个断点时,我正在寻找一种获得堆栈跟踪的方法.这可能吗?理想情况下,不必崩溃应用程序和修改代码.我尝试使用Android调试器,但找不到任何有用的东西.

原因是有时候我不确定应用程序是如何到达代码中的某个点的,因此我对其他可以帮助我跟踪方法调用的建议持开放态度.

java eclipse android adt

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

Java - 用于循环声明的逗号运算符

我知道我可以像这样使用逗号运算符

for (int i = 1, j = 15; j>10; i++, j--) {
    // do something neat
}
Run Code Online (Sandbox Code Playgroud)

但是有些文章似乎暗示逗号运算符可以在for循环声明之外使用,例如

int j = 2, k = 4 ;
int x ;
// Assignment statement with comma operator
x = j + 1, k ;
Run Code Online (Sandbox Code Playgroud)

来源:http://www.cs.umd.edu/~clin/MoreJava/ControlFlow/comma.html

要么

int x = (expression) ? (i++,2) : 3;
Run Code Online (Sandbox Code Playgroud)

来源:https://stackoverflow.com/a/12047433/1084813

对于代码混淆竞赛来说这将是一个巧妙的技巧或混淆我的同事,但两个示例都不会编译(Java 1.6,Eclipse Juno),错误是"赋值的左侧必须是变量".我试着查看编译器设置,看看是否可以禁止防止错误的代码,但没有运气.

怎么了?逗号运算符是旧规范的一部分,后来又改变了吗?使用不同Java设置编写这些示例的人是否允许这样做?

java for-loop variable-assignment comma-operator assignment-operator

7
推荐指数
2
解决办法
9510
查看次数

Xamarin:应用程序未安装问题

当我在 Android 移动设备上以调试模式安装我的应用程序时,它似乎已安装。

但是,在对应用程序进行签名并发布之后,它并没有安装在我的手机上。(释放模式)

它说:未安装应用程序。我尝试了几件事,但无法解决此问题。我还用另一个密钥库进行了测试,但仍然无法安装。

我验证了 Xamarin Studio 选项,但一切正常,有人知道吗?

android xamarin xamarin-studio

7
推荐指数
2
解决办法
1万
查看次数

将 pytest 测试相互隔离

我正在开发一个快速增长的 Python 项目。最近,我们的测试套件开始变得有些难以管理。一些测试在它们所在的模块以错误的顺序执行时失败,尽管它们看起来很好隔离。

我发现了一些关于此的其他问题,但他们关注的是固定装置:

Pytest 固定装置相互干扰

pytest-hypothesis 运行之间的测试隔离

虽然我们也在使用固定装置,但我不认为问题出在它们内部,但更有可能是因为我们使用的库中的类具有内部状态,这些内部状态会通过测试运行而改变,例如通过mockito-python.

我最初来自 Java 世界,除非你明确地让你的测试相互依赖或做一些疯狂和不寻常的事情,否则这不会发生。在 Python 中遵循相同的一组实践导致我遇到了这些问题,所以我意识到我可能遗漏了 Python 测试开发的一些关键规则。

是否有可能告诉pytest在不同模块运行之间删除/恢复/重新初始化所有类的内部状态?

如果没有,我们在测试开发过程中应该遵循哪些规则来防止这些问题?

编辑:我们发现的问题之一是我们在测试文件的顶层设置了一些对象,这些对象是由mockito-python. 执行测试时,首先导入所有文件,然后执行测试。发生的事情是调用了一个测试,mockito.unstub()它删除了 mockito 的模拟注册表中的所有模拟。所以当测试实际执行时,另一个测试已经拆除了它的模拟。这种行为非常违反直觉,尤其是对于没有经验的开发人员。

python testing unit-testing fixtures pytest

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

获得SupportFragmentManager而不扩展FragmentActivity

我想在我的应用程序中使用的片段,而是因为我的应用已经延伸的的活动,是一个库的一部分,我不能延伸FragmentActivity.因为这意味着我不能打电话getSupportFragmentManager(),我要寻找一个解决办法,让我使用的片段,而不必延长FragmentActivity.可能吗?

android android-fragments android-fragmentactivity

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

不小心删除了docker网络,现在容器无法启动

我想摆脱 MySQL 容器中的持久状态。作为一个菜鸟,我找到了一个应该为我执行此操作的命令 -docker-compose down -v

我想,如果我更改 YAML 撰写文件,使其仅包含我想要删除其状态的容器,启动它,然后使用上面的命令禁用它,它不会以任何方式接触其他容器。这就是我所做的,我只启动了一个容器,运行命令,重新启动后,状态确实消失了。到目前为止,一切都很好。

但是,当我尝试启动原始的一组容器时,会发生以下情况:

ERROR: for mongo  Cannot start service mongo: network 9d1660acaba98e16fb130dd38b48a3ef0dedfd7a291b4ad6f7c7f280d72a86a4 not found
Run Code Online (Sandbox Code Playgroud)

我不明白那里发生了什么事。正确的修复方法是什么?

docker docker-compose

6
推荐指数
2
解决办法
3193
查看次数

Eclipse的最新版本是否仍然可以开发J2ME?

我尝试从http://www.eclipse.org/mtj/安装MTJ 1.1.2 ,但重新启动后,没有出现任何新的选项,表明插件就在那里.由于Helios的最新版本,我担心该插件不再适用于Juno及更高版本.

是否仍然可以使用Eclipse开发J2ME应用程序?如果是这样,怎么样?如果没有,有哪些替代方案?

eclipse mobile java-me

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

以编程方式将按钮宽度设置为父LinearLayout的50%

我使用LinearLayout创建了一个Dialog,在这个Dialog中,我有一个Button.我想将其宽度设置为Dialog宽度的50%,但无论我做什么,按钮仍然会填满整个宽度.主要问题似乎是我无法以编程方式设置按钮的重量.我尝试创建第二个水平LinearLayout,它将按住权重设置为0.5f的按钮(父亲的weightSum为1),但这并没有改变任何东西.如何将按钮设置为宽度的一半?

我已经查看了所有其他问题,但大多数都使用xml,因此它们不相关,并且以编程方式解决它的是使用像素的硬编码值,这显然是对问题的错误解决方案.

编辑:添加一些代码

LinearLayout linearLayout = new LinearLayout(mContext);
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.setWeightSum(1);

// I use these params when I call addContentView
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);

testButton = new Button(mContext);
testButton.setText("Test");
testButton.setId(1);
testButton.setWidth(0);
testButton.setGravity(Gravity.CENTER);

LinearLayout buttonLayout = new LinearLayout(mContext);
butonLayout.setOrientation(LinearLayout.HORIZONTAL);

LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 0.5f);
testButton.setLayoutParams(buttonParams);
buttonLayout.addView(testButton);

linearLayout.addView(buttonLayout);

...

this.addContentView(scrollView, layoutParams);
Run Code Online (Sandbox Code Playgroud)

android android-layout android-linearlayout

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

如何升级构建代理以支持Java 8

我想在应用程序中使用Java 8,但是我正在使用的TeamCity构建代理上没有安装此版本的Java.在不破坏仍在Java 7上运行的其他项目的构建的情况下,将Java升级到代理上的最新版本的正确过程是什么?

teamcity teamcity-8.0

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

pytest 可以在测试类中运行测试吗?

我有一堆测试,我决定放在一个类中,示例代码如下:

class IntegrationTests:

    @pytest.mark.integrationtest
    @pytest.mark.asyncio
    async def test_job(self):
        assert await do_stuff()
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行测试时: pipenv run pytest -v -m integrationtest,根本没有检测到它们,在将它们移到类之前我得到了以下信息:

5 passed, 4 deselected in 0.78 seconds
Run Code Online (Sandbox Code Playgroud)

我现在明白了:

2 passed, 4 deselected in 0.51 seconds
Run Code Online (Sandbox Code Playgroud)

为什么不pytest检测这些测试?不支持测试类吗?

python pytest

4
推荐指数
2
解决办法
2857
查看次数

如何安全地处理Java的包装原语

我正在编写一个程序,需要处理具有许多包装数字变量的对象,如Long,Double,Integer等.如何在不必在任何地方进行空检查的情况下安全地对它们执行数值运算?

我希望这是几乎每个Java程序员必须迟早要处理的事情,所以我很惊讶没有数百个关于该主题的博客帖子和SO问题.

我目前的解决方案是通过这样的方法过滤所有数字:

private static safelyUnbox(Integer i) {
    return i == null ? 0 : i.intValue();
}
...
sumVariable += safelyUnbox(stupidObject.getNumberOfWhatever());
Run Code Online (Sandbox Code Playgroud)

java primitive autoboxing nullpointerexception

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