繁体   English   中英

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

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

我有两个类,一个是计算对象(Cyber​​Pet.java),另一个是测试计算对象(TestCyber​​Pet.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类中使用。 如何使用createPet创建Cyber​​Pet的实例?

我希望我在这里放足够的信息...这是我关于StackOverflow的第一篇文章,因此,如果我需要添加更多内容,请告诉我! :)

好吧,似乎您对这些类应如何理解有所混淆。

如果要创建测试对象,则不需要用户输入。 您应该只使用已知值。 它更快并且达到了相同的目的。 其次,如果要访问private static方法,则需要从类内部进行访问。 可以通过以下方式访问它:

TestCyberPet.createPet();

这将返回一个CyberPet类型的实例。

注意

  • 首先,您需要查看JUnit之类的测试框架 这将为您自动化测试过程,并使编写这类测试变得更加容易。

  • 其次,修改您对OOP的知识。 您不应该对该类之外的类执行用户输入的验证。 只有班级本身应该知道它需要什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM