如何重构超过50000行的Java文件?

如何重构超过50000行的Java文件?,java,spring,class,refactoring,Java,Spring,Class,Refactoring,我有一个java类,它有超过50000行代码。我想重构它并生成多个小类 我曾尝试过开设儿童课程,但如果我错了,也会有一些挑战来纠正我 a。我们不能用父对象调用子方法 b。此外,我们不能从父对象调用子对象中的方法 public class Parent { public void a(){ System.out.println("Parent :: a"); b(); //point b } } public class Chi

我有一个java类,它有超过50000行代码。我想重构它并生成多个小类

我曾尝试过开设儿童课程,但如果我错了,也会有一些挑战来纠正我

a。我们不能用父对象调用子方法

b。此外,我们不能从父对象调用子对象中的方法

public class Parent {

    public void a(){
        System.out.println("Parent :: a");
        b();          //point b
    }
}

public class Child extends Parent{

    public void b(){
        System.out.println("Child :: m");
    }
}

public class Main {

    public static void main(String[] args) {
        Parent p = new Parent();
        p.b();         //point a       

        Child c = new Child();
        c.a();
    }
}
编辑:父类是@ManagedBean类,我正在使用JSF和Spring

B点

你可以,它叫。父母可以定义

一个操作的框架,包括许多高级步骤。这些步骤本身由与模板方法位于同一类中的其他辅助方法实现

helper方法可以是抽象方法(需要case子类来提供具体的实现),也可以是钩子方法(在超类中有空的主体)

突出显示的部分是我更喜欢的

public abstract class Parent {
    public void a(){
        System.out.println("Parent :: a");
        b();
    }
    public abstract void b();  // shouldn't necessarily be public
}

public class Child extends Parent {
    @Override
    public void b(){
        System.out.println("Child :: m");
    }
}
A点

你不能,它不是父界面的一部分。要么将该方法添加到父级,要么重新考虑为何在父级引用上调用它。

点B

你可以,它叫。父母可以定义

一个操作的框架,包括许多高级步骤。这些步骤本身由与模板方法位于同一类中的其他辅助方法实现

helper方法可以是抽象方法(需要case子类来提供具体的实现),也可以是钩子方法(在超类中有空的主体)

突出显示的部分是我更喜欢的

public abstract class Parent {
    public void a(){
        System.out.println("Parent :: a");
        b();
    }
    public abstract void b();  // shouldn't necessarily be public
}

public class Child extends Parent {
    @Override
    public void b(){
        System.out.println("Child :: m");
    }
}
A点


你不能,它不是父界面的一部分。要么将该方法添加到父级,要么重新考虑为什么在父级引用上调用它。

a和B可以通过使用多态性来实现

public class Parent {

    public void a(){
        System.out.println("Parent :: a");
        b();          //point b
    }

    public void b() {
         System.out.println("not in use");
    }
}

public class Child extends Parent{

    @Override
    public void b(){
        System.out.println("Child :: m");
    }
}


    public class Main {

    public static void main(String[] args) {
        Parent p = new Child();
        p.b();         
        p.a();        

    }
}
结果:

Child:: m
Parent:: a
Child:: m

A和B可以通过使用多态性来实现

public class Parent {

    public void a(){
        System.out.println("Parent :: a");
        b();          //point b
    }

    public void b() {
         System.out.println("not in use");
    }
}

public class Child extends Parent{

    @Override
    public void b(){
        System.out.println("Child :: m");
    }
}


    public class Main {

    public static void main(String[] args) {
        Parent p = new Child();
        p.b();         
        p.a();        

    }
}
结果:

Child:: m
Parent:: a
Child:: m

以上代码是否是您心目中的重构结果?当然,最初的代码不是50K行,它会是什么样子?@LutzHorn当我们不想看到OP的代码时,这是一种罕见的情况@LutzHorn父类是具有50k行的类。我展示的代码是在我们将其划分为子类以及由此产生的挑战之后。如果它有帮助,我们可以用很多方法来考虑父类,并提出一个解决方案。上面的代码是否已经读取了重构的结果?当然,最初的代码不是50K行,它会是什么样子?@LutzHorn当我们不想看到OP的代码时,这是一种罕见的情况@LutzHorn父类是具有50k行的类。我展示的代码是在我们将其划分为子类以及由此产生的挑战之后。如果它有帮助,我们可以用很多方法来考虑父类,并提出一个解决方案。嗨,谢谢你的回答,我已经更新了我原来的问题。我们不能创建抽象类的对象,因为我的父类是@ManagedBean类。您好,谢谢您的回答,我已经更新了我的原始问题。我们不能创建抽象类的对象,因为我的父类是@ManagedBean类。您好,谢谢您的回答,我已经更新了我的原始问题。我们无法生成抽象类的对象,因为我的父类是@ManagedBean类。我编辑了答案,虽然有点不正确,但仍然给出了解决方案嗨,谢谢你的回答,我已经更新了我的原始问题。我们不能创建抽象类的对象,因为我的父类是@ManagedBean类。我编辑了答案,它有点不正确,但仍然给出了解决方案