小编Sam*_*ery的帖子

在Java中,我可以指定任意数量的泛型类型参数吗?

我希望用Java创建一个特定类型的接口(虽然这适用于常规类).这个接口需要包含一些方法,比如说invoke; 它将使用不同数量的参数调用,具体取决于提供的泛型类型参数.

举个例子:

public interface Foo<T...> {
    public void invoke(T... args);
}

// In some other class
public static Foo<Float, String, Integer> bar = new Foo<Float, String, Integer>() {
    @Override
    public void invoke(Float arg1, String arg2, Integer arg3) {
        // Do whatever
    }
};
Run Code Online (Sandbox Code Playgroud)

为了简要解释如何使用它(并提供一些上下文),请考虑一个类Delegator:该类采用不同数量的泛型类型,并且具有单个方法 - invoke使用这些参数类型.该方法将其参数传递给列表中的对象:一个实例IDelegate,它采用相同的泛型类型.这允许Delegator在几个委托方法(在内部定义IDelegate)之间进行选择,而不必为每个特定的参数类型列表创建新类.

有这样的可用吗?我已经阅读了C++中的可变参数模板,但在Java中找不到类似的东西.有这样的东西吗?如果不是,那么模拟相同数据模型的最简洁方法是什么?

java generics

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

为什么这种测试回文的方法要慢得多?

我有两种不同的回文测试方法.一个是以下内容:

def palindrome(text):
    return text == text[::-1]
Run Code Online (Sandbox Code Playgroud)

当然很简单,但我想象它会很慢,因为它(当然)必须text[::-1]在反转之后存储某个地方的值,然后检查两者中的每个字符.所以,我尝试了另一种方法:

def palindrome_2(text):
    left = 0
    right = len(text) - 1
    while left < right:
        if text[left] != text[right]:
            return False
        right -= 1
        left += 1
    return True
Run Code Online (Sandbox Code Playgroud)

它从起点和终点开始,然后进入中心.据我所知,这应该更快,因为它只会检查[0, n // 2),反之亦然.但是,当我使用timeit来测试这些时,第一个是0.32第二个,第二个是1.34.为什么?

python native-code python-performance

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

标签 统计

generics ×1

java ×1

native-code ×1

python ×1

python-performance ×1