Java 对于一个对象来说,有一个实例化自身的方法是不是很糟糕?

Java 对于一个对象来说,有一个实例化自身的方法是不是很糟糕?,java,coding-style,main,Java,Coding Style,Main,我有一个对象,它有一个读取文件的方法,对于读取的每一行,它都将数据解析为一个对象 例如: public class test{ private void processData{ while((input = bf.readLine()) != null){ test t = new test(); } } } 在方法而不是主方法中这样做是否正确?为什么 如果递归创建新对象是解决您的问题的最佳方法,那么这种方式也不错

我有一个对象,它有一个读取文件的方法,对于读取的每一行,它都将数据解析为一个对象

例如:

public class test{
     private void processData{
        while((input = bf.readLine()) != null){
             test t = new test();
        }
    }
 }

在方法而不是主方法中这样做是否正确?为什么

如果递归创建新对象是解决您的问题的最佳方法,那么这种方式也不错

是的,没关系, 您可以在任何位置创建类的实例


但是为了获得良好的实践,避免创建新对象,但是如果需要,您可以创建对象。

主要是调用自身,或者换句话说,创建在解析/生成
XML
Json
期间可以看到的相同类型的类,或者如果您的对象表示每个节点可以存储其他节点的数据树


从您的示例中,由于您没有在
processData
之后调用可能导致无限循环的,所以这没关系。

不,这不是因为单例模式正是基于此

public static Test newInstance(){
    if(instance==null){
        instance = new Test();
    }
    return instance;
}

有关详细信息,请参见singleton模式。

是的,很少有设计模式创建自身或内部类的实例(singleton、Builder、Factory模式)

我认为您的示例不可用,虽然您可以在外部创建对象,但无法访问您的私有方法


xdesperadox中的示例也不完整。缺少私有构造函数是的,您必须将实例存储在私有静态字段中,以便下一次调用newInstance()的结果(返回同一个实例。

我不知道,但这感觉像是一个大规模的设计失败。你似乎纯粹为了构造函数中发生的任何事情的副作用而构建一个对象。与其说是大规模的设计失败,不如说是拥有两个类的中间步骤……有一种相当常见的风格,称为“工厂方法”类的静态方法创建实例,通常使用私有构造函数。在各种情况下,这是有意义的。“工厂”可能是在不同的类中,通常是一个超类。这与示例的情况并不完全相同,但因为它只构造了一次,而不是重复…但这可能只是一个示例,否则对于问题本身来说,这是正确的!是的,我知道。我只是想强调这样的有效案例。是的,是的我想一切都可以。在(相对罕见的)情况下,这种事情(在一个实例类中创建一个类的实例)是有意义的。@HotLicks我只是在回答他提出的问题。他没有一个很好的例子,也没有一个他试图解决的具体问题,所以他得到了一个“粘乎乎的”回答。完全正确。我只是说我已经做了这件事,但可能只做了3次。很抱歉,说得这么含糊,但我无法对这个问题进行更详细的阐述,我想尽可能地概括它。