小编sco*_*awg的帖子

是否可以在Android/dalvik中覆盖Java类中的本机方法?

TestMe使用EasyMock 对一个类进行单元测试,并且其中一个方法(比如说method(N n))期望一个N具有本机方法的类型的参数(比方说nativeMethod()).

class TestMe {
    void method(N n) {
        // Do stuff

        n.nativeMethod();

        // Do more stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

method()需要N.nativeMethod()在某个时候调用,而我遇到的问题是我的N的Easymock模拟对象无法覆盖本机方法.我不拥有N级,但我可以TestMe以任何必要的方式进行重构.

我决定创建自己的课程FakeN extends N,这个课程无效nativeMethod:

class FakeN extends N {
    FakeN(int pointer) {
        super(pointer);
    }

    @Override
    public void nativeMethod(Object o) {
        // super.nativeMethod() is an actual native method defined as:
        // public native void nativeMethod(Object o)
        //
        // IGNORE
    }
}
Run Code Online (Sandbox Code Playgroud)

但是虽然编译器没有抱怨,但是当我运行测试时,它似乎N.nativeMethod()是被调用的而不是 …

java android overriding native-methods easymock

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

为什么我的ttk.Treeview click处理程序返回tree.focus()上的错误项?

我有一个简单的脚本使用一个ttk.Treeview实例,我正在填充文件系统树的内容.我想在点击(叶子)项目时执行某个操作,所以我配置了一个像这样的处理程序:

self.tree.tag_bind('#entry', '<1>', self.onClick)
Run Code Online (Sandbox Code Playgroud)

在方法中,onClick我只是打印出被点击的项目,如下所示:

def onClick(self, event):
    item_id = str(self.tree.focus())
    print 'Selected item was %s' % item_id
    item = self.tree.item(item_id)
    flag = '#another_tag' in item['tags']
    print '  flag = %s' % flag
Run Code Online (Sandbox Code Playgroud)

我发现这些消息滞后于一个点击.所以我的第一次点击得到一个随机值(看起来像树的根),然后第n次点击打印出被点击的第(n-1)项的值.

它们是这样插入的: tree.insert(parent_id, 'end', id, text=id, tags=['#entry'])

任何人都知道这是Tkinter中的错误还是我做错了什么?

这似乎是Ubuntu Natty和OS X Lion的一个问题(使用默认的预装版本的Python和Tkinter)

python treeview tkinter onclick ttk

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

在Python中每个对象可以调用多少次`__del__`?

我看到一些代码在__del__我发现好奇的对象上被明确调用,所以我试着用它来理解它是如何工作的.

我尝试了以下代码(我理解使用__del__它本身可能很糟糕,但我只想在这里尝试自己):

class A:
    def __init__(self, b):
        self.a = 123
        self.b = b
        print "a is {}".format(self.a)
    def __del__(self):
        self.a = -1
        print "a is {}".format(self.a)
        self.b.dont_gc_me = self
    def foo(self):
        self.a = 9999999
        print "a is {}".format(self.a)

class Foo:
    def __init__(self):
        self.a = 800
    def __del__(self):
        self.a = 0
Run Code Online (Sandbox Code Playgroud)

然后尝试(在IPython控制台中)以下内容:

In [92]: f = Foo()

In [93]: a = A(f)
a is 123

In [94]: a = None
a is -1

In [95]: f.__dict__
Out[95]: …
Run Code Online (Sandbox Code Playgroud)

python garbage-collection destructor

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

使用map()来调用列表上的函数或更传统的迭代是不是Pythonic?

我有一个带有方法的对象列表,比方说cleanup(),我需要调用所有这些对象.我知道至少有两种方法:

map(lambda x: x.cleanup(), _my_list_of_objects)
Run Code Online (Sandbox Code Playgroud)

要么

for x in _my_list_of_objects:
    x.cleanup()
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. Pythonic比另一个更多吗?
  2. 还有其他更好的方法吗?我看到前者经常在代码库中使用(在工作中),但它让我觉得地图构造并返回一个然后被丢弃的列表(对吧?).
  3. 是否要考虑对(直接GC的列表)的性能影响?

python iteration

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

在AOSP中,解析AndroidManifest.xml的代码是什么?

我试图了解如何以及何时解析应用程序的AndroidManifest.xml,但无法找到它在AOSP源中.我也搜索了AndroidXRef,但我没有看到任何命中(可能是因为这个解析是以二进制XML完成的,因此标签 - 例如android:name- 不是字符串.)

parsing android android-manifest android-source

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

在RxJava中,如何启动从API生成的潜在无限事件流?

我有一个可供客户使用的API,可以简化为:

public class API {
  public void sendEvent(Event e);
}
Run Code Online (Sandbox Code Playgroud)

Event每当客户端调用API(技术上将Binder转换为Service衍生产品)时,实例就会进入我的系统,然后处理,过滤并分派到其他内部组件.我不关心过去的事件,只关注用户订阅时可用的事件.对于Rx范例来说,这似乎是一种天生的选择,而我只是在沾沾自喜.

我需要一个创建一次的Observable,允许多个订阅者,并且可以Event通过反应管道向观察者发送其实例.一个Subject看起来适合什么,我希望做的(尤其是这个答案这个问题和我产生共鸣).

其他RxJava用户推荐什么?

android reactive-programming rx-java rx-android

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

如何检查iterable中只有一个值是否解析为True?

是否有一种优雅,可读的方式来检查迭代中的所有元素是否it解析True(您可以假设所有值都是布尔值,尽管这与我的问题无关)?我提出了:

any(it) and not reduce(lambda x, y: x and y, it)

但是我认为减少使得理解有点混乱加上我觉得它不起作用:

In [1]: a=[True, True, False]

In [7]: any(a) and not reduce(lambda x, y: x and y, a)
Out[7]: True
Run Code Online (Sandbox Code Playgroud)

有更可读的方法吗?

更新:我在上面的表达式中意识到错误.reduce()需要在看到True时停止,而不是继续.

python expression list

3
推荐指数
2
解决办法
452
查看次数

在Mac上运行AOSP构建(Yosemite及更高版本)

我能够将android-5.0.1_r1的源代码放到我的工作目录中.但是,我在模拟器上构建和运行代码时遇到了麻烦,因为午餐命令给我带来了麻烦.

repo has been initialized in /Volumes/AOSPDiskImage/AOSP
Nikhils-MBP:AOSP Nikhil$ . build/envsetup.sh
including device/asus/deb/vendorsetup.sh
including device/asus/flo/vendorsetup.sh
including device/asus/fugu/vendorsetup.sh
including device/asus/grouper/vendorsetup.sh
including device/asus/tilapia/vendorsetup.sh
including device/generic/mini-emulator-arm64/vendorsetup.sh
including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
including device/generic/mini-emulator-mips/vendorsetup.sh
including device/generic/mini-emulator-x86/vendorsetup.sh
including device/generic/mini-emulator-x86_64/vendorsetup.sh
including device/lge/hammerhead/vendorsetup.sh
including device/lge/mako/vendorsetup.sh
including device/moto/shamu/vendorsetup.sh
including device/samsung/manta/vendorsetup.sh
including sdk/bash_completion/adb.bash
Nikhils-MBP:AOSP Nikhil$ lunch

You're building on Darwin

Lunch menu... pick a combo:
 1. aosp_arm-eng
 2. aosp_arm64-eng
 3. aosp_mips-eng
 4. aosp_mips64-eng
 5. aosp_x86-eng
 6. aosp_x86_64-eng
 7. aosp_deb-userdebug
 8. aosp_flo-userdebug
 9. full_fugu-userdebug
 10. aosp_fugu-userdebug
 11. aosp_grouper-userdebug
 12. aosp_tilapia-userdebug
 13. mini_emulator_arm64-userdebug
 14. …
Run Code Online (Sandbox Code Playgroud)

android android-source

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

为什么%T不打印我常量的类型?

我正在学习使用官方旅游/教程的golang.在其中一个例子中,我看到一个说明An untyped constant takes the type needed by its context.

我正在尝试这个:

package main

import "fmt"

const (
    // Create a huge number by shifting a 1 bit left 100 places.
    // In other words, the binary number that is 1 followed by 100 zeroes.
    Big = 1 << 100
)

func main() {
    fmt.Printf("Big is of type %T\n", Big)
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时失败了:

# command-line-arguments
./compile63.go:12:13: constant 1267650600228229401496703205376 overflows int
Run Code Online (Sandbox Code Playgroud)

为什么我无法通过这种方式发现常数的类型?(请注意我是一个完全的菜鸟,很可能还没有发现足够的语言能够自己解决这个问题).

types constants go

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

如果元组被描述为序列类型,为什么长度为1的元组被视为标量?

我刚刚开始学习Python,并in在解释器中使用操作员并发现了一些有趣的东西.为什么这样False:

# case 1
>>> [1] in [1,2,3]
False
Run Code Online (Sandbox Code Playgroud)

但这些是True

# case 2
>>> [1] in [[1],2,3]
True

# case 3
>>> (1) in [(1),2,3]
True

# case 4
>>> (1) in [1,2,3]
True

# case 5
>>> 1 in [(1),2,3]
True
Run Code Online (Sandbox Code Playgroud)

我可以理解为什么#1是False,因为它[1]是一个列表对象,它不会出现在列表中[1,2,3].我也明白为什么#2是True.但是,如果元组是不可改变的列表(如规范Matloff描述了他们在他的教程),或者是不可变的序列(如元组Python文档说),为什么(1)等同于1代替[1]

python tuples list operators

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