如何使用 class 中的方法在 Java 中创建另一个方法的实例?

How can I use a method in one class to create an instance of another in Java?

我有两个 classes,一个是计算对象 (CyberPet.java),另一个是测试计算对象 (TestCyberPet.java)。在 TestCyber​​Pet 中,我有一个名为 createPet() 的方法,它将使用用户输入来实例化 Cyber​​Pet 的一个实例。我已经完成了

CyberPet pet3 = null;

这是 createPet():

   private static CyberPet createPet()
   {
        /*** Local variables ***/

        Scanner scanner = new Scanner( System.in );

        final String formatString = "%22s: ";

        String name;
        String size;
        String activity;

        /*** Get user input ***/

        System.out.println();
        System.out.printf( formatString, "Enter your pet's name" );
        name = scanner.nextLine().trim();

        System.out.println();
        System.out.printf( formatString, "Enter your pet's size (big or small)" );
        size = scanner.nextLine().trim().toLowerCase();

        System.out.println();
        System.out.printf( formatString, "Enter your pet's current activity (eating, sleeping, or thinking)" );
        activity = scanner.nextLine().trim().toLowerCase();

        /*** Validate input, notify user of errors ***/

        if ( name.length() == 0 )
        {
            System.out.println( "   Invalid input. Name cannot be blank." );
            name = CyberPet.DEFAULT_NAME;
        }

        // else leave as entered string

        if ( size == "big" || size == "small" )
        {
            System.out.println( "   Invalid input. Size must be either big or small." );
            size = CyberPet.DEFAULT_SIZE;
        }

        // else leave as entered string

        if ( activity == "eating" || activity == "sleeping" || activity == "thinking" )
        {
            System.out.println( "   Invalid input. Activity must be eating, sleeping, or thinking." );
            activity = CyberPet.DEFAULT_ACTIVITY;
        }

        // else leave as entered string

        /*** Create cyberpet ***/

        CyberPet pet = new CyberPet( name, size, activity );
        return pet;
    }

在尝试执行此操作之前,我一直在使用它(我认为!)

pet3.createPet();

因为 createPet 不在 Cyber​​Pet class 中,因此无法在那里使用它。如何使用 createPet 创建 Cyber​​Pet 实例?

我希望我在这里提供了足够的信息...这是我在 Whosebug 上的第一个 post,所以如果我需要添加更多内容,请告诉我! :)

嗯,看来您对这些 class 应该如何理解有点混乱。

如果您要创建测试对象,则不需要用户输入。您应该只使用已知值。它更快并且服务于相同的目的。其次,如果你想访问 private static 方法,那么你需要从 class 中进行。可以通过以下方式访问:

TestCyberPet.createPet();

这将 return 类型 CyberPet 的实例。

备注

  • 首先,你需要看一下testing frameworks like JUnit。这会为您自动执行测试过程,并使编写此类测试变得更加容易。

  • 其次,温习OOP知识。您不应在 class 之外对 class 的用户输入执行验证。只有 class 本身应该知道它需要什么。