gpt4 book ai didi

java - 如何在不将方法设为静态的情况下使用@Enclosed

转载 作者:行者123 更新时间:2023-11-29 07:40:01 46 4
gpt4 key购买 nike

我需要不同的参数集,所以我决定使用 @Enclosed .但是,嵌套类必须是静态的,因此方法调用的所有现有方法/常量都必须是静态的。但这很难,因为我无法更改所有这些方法的定义。

有没有什么方法可以不用在已有方法的定义中加上static就可以使用@Enclosed?

这是一个例子,这样你就知道我在问什么了。在这个例子中,由于 data() 是静态的,类 someTest 必须是静态的,所以如果我调用 nonStaticMethod(),我在调用 nonStaticMethod( ).但我不想将 nonStaticMethod() 重新定义为静态。

@RunWith(Enclosed.class)
public class EnclosedParameterizedTest extends EnclosedBase{

@RunWith(Parameterized.class)
public static class SomeTest {

@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][]{
new Object[]{"NY"},
new Object[]{"CA"},
});
}

String state;

public SomeTest(String state) {
this.state = state;
}

@Test
public void verifyStateTest(){
nonStaticMethod(); //a method already defined in parent of
//EnclosedBase which I cannot re-define
}
}
}

最佳答案

这是很多人都感到困惑的事情。 “静态嵌套类”的全部意思是内部类没有对外部类的引用。不要求将方法或字段设为静态。

例如,查找 java.util.HashMap 的源代码,有一个名为 Entry 的静态内部类实现了 java.util.Map.Entry:

static class Entry<K,V> implements Map.Entry<K,V> {
final K key;
V value;
Entry<K,V> next;
int hash;

/**
* Creates new entry.
*/
Entry(int h, K k, V v, Entry<K,V> n) {
value = v;
next = n;
key = k;
hash = h;
}

public final K getKey() {
return key;
}

public final V getValue() {
return value;
}
// ...

显然一个映射必须有多个条目,所以 static 关键字没有被用来表示这是某种单例。

关于java - 如何在不将方法设为静态的情况下使用@Enclosed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31249246/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com