gpt4 book ai didi

java - 可以构造泛型类型的泛型方法

转载 作者:行者123 更新时间:2023-12-04 05:09:08 25 4
gpt4 key购买 nike

我将测试用例添加到测试套件中,如下所示:

for(String methodName : getPublicDeclaredMethods(TestA.class))
{
this.addTest((new TestA(methodName)));
}

for(String methodName : getPublicDeclaredMethods(TestB.class))
{
this.addTest((new TestB(methodName)));
}

这相当于这样做:
this.addTest((new TestA("TEST_METHOD_1")));
this.addTest((new TestA("TEST_METHOD_2")));
this.addTest((new TestB("TEST_METHOD_1")));
this.addTest((new TestB("TEST_METHOD_3"))); // woops I forgot TEST_METHOD_2

我坚持使用这个奇怪的测试框架,其中方法名称通过构造作为字符串提供。

我上面的代码保证我添加了在特定类中定义的所有测试用例。但是,我想要一个看起来像这样的方法:
void <T> addTestCasesFromClass()
{
for(String methodName : getPublicDeclaredMethods(T.class))
{
this.addTest((new T(methodName)));
}
}

但我不确定这是如何在 Java 中完成的。甚至有可能吗? TestA 和TestB 派生自Test 类。

最佳答案

泛型在这里没用,因为你不能做类似 new T 的事情。 .但是你可以通过更多的反射(reflection)来做到这一点。鉴于您传递给此方法的所有类都具有一个仅接受一个 String 参数的构造函数。

void addTestCasesFromClass(Class<?> clz)
{
for(String methodName : getPublicDeclaredMethods(clz))
{
this.addTest(clz.getConstructor(String.class).newInstance(methodName));
}
}

一个电话看起来像这样
addTestCasesFromClass(TestA.class); 
addTestCasesFromClass(TestB.class);

如果您的 addTest方法只接受某个基类的对象(假设它是 TestBase ),然后更改 clz 的泛型参数至 Class<? extends TestBase> clz .

关于java - 可以构造泛型类型的泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15112576/

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