gpt4 book ai didi

Java 抽象类构造函数范围

转载 作者:行者123 更新时间:2023-11-30 04:18:16 24 4
gpt4 key购买 nike

我想知道解决这个问题的最佳方法是什么:

我有一个抽象类,如下:

public abstract class AbstractTestClass
{
public AbstractTestClass(String text)
{
SomeObject someObject = SomeStaticClass.getSomeObjectFromText(text);
//etc...
this.property1 = someObject.property1
//basically populate properties based off of someObject
}
}

以及一个示例实现:

public class AbstractTestClassImpl
{
public AbstractTestClassImpl(String text)
{
super(text);
SomeObject someObject = SomeStaticClass.getSomeObjectFromText(text);
//do stuff with someObject that isn't done in the super constructor because it may vary per different implementations of the abstract class
}
}

因此,从这个示例代码片段中, someObject 创建了两次,我想知道是否可以仅创建一次或保持原样。

显而易见的解决方案是使 someObject 成为 AbstractClass 中的成员变量,但是,我也遇到了根本不需要 someObject 的情况。

考虑构造函数:

public AbstractTestClass(int i, int j, char c)
{
//do stuff where someObject is not required
}

在这种情况下,拥有 someObject 成员是没有意义的,因为它根本没有被使用。

假设 someObject 仅在该构造函数中使用。

解决这个问题的最佳方法是什么?

最佳答案

代码中最大的味道是在构造函数内调用静态类,而不是将值作为参数传递到构造函数中。我认为最有帮助的是询问

我该如何测试这个?

考虑在 JUnit 中编写一些单元测试。 PowerMockito 提供了模拟静态类的功能,但在这种情况下,它不会提供有效的测试,因为测试代码必须理解代码而不是理解行为。

我真的很喜欢这篇文章Write Testable Code偶尔我自己也引用一下。

关于Java 抽象类构造函数范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17796066/

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