获取班级名称

时间:2020-09-28 13:13:01

标签: java string class inheritance polymorphism

我正在编写一个管理员类,而我正在编写的所有其他类均应继承自该类。在这种情况下,我希望类继承一个main方法,并且我还计划实现一个工厂。我必须编写一些系统输出,其中包括各种类名,例如charcount,linecount等。为此,我需要能够获取当前的类名,因为该方法将被多个类继承。有没有办法在Java中做到这一点?您可以在下面找到我要执行的sysout示例:

System.out.println("Usage: className <src>\n"); 

在此先感谢大家,感谢您的帮助!

编辑: 大家好!

非常抱歉,我之前并不清楚,我将在下面显示整个代码并尝试进一步解释我的想法。因此,我要做的实际上是制作一个主要方法来检查文件是否存在,以及文件是否存在,它将尝试执行某些功能(所有这些都将在命令行中)。我正在练习工厂设计模式(我以前从未做过的事情)。我将使用main方法的execute部分来调用某些工厂(尚未建立)来创建Administrator子类的对象,并返回文件中的charcount和文件中的linecount之类的东西。上面的问题涉及此主要方法的一部分,该部分将打印子类的用法。因此,例如,我将从管理员那里继承字符数,因为检查文件的过程是管理员的主要方法,但是当我打印使用情况消息时,我不希望它打印“用法:管理员”,而是“用法” :charcount“。我希望这可以解决问题,并再次对我在上面的解释有多糟糕感到抱歉,您可以在下面的代码中找到我所拥有的东西:

public class Administrator 
{
    
    private static File srcFile = null; 
    private static String srcFilename = "<srcFilename>"; 
    
    
    public static void main(String[] args) throws IOException
    {    
         
        
        //check the command line 
        if(args.length != 1) 
        { 
            System.out.println("Usage: charcount <src>\n"); 
            return;
        } 
        
        // Check if arguments are valid, if the srcFile exists, and if can create the dstFile.
        if (args[0] != null)
        { 
            //check <src> 
            srcFilename = args[0]; 
            System.out.println( ": srcFilename '" + srcFilename + "'"); 
            srcFile = new File(srcFilename); 
            if(!srcFile.canRead()) 
            { 
                System.out.println("charcount: cannot open srcFile '" + srcFilename + "'"); 
                return;
            }
        } 
        else 
        { 
            System.out.println("charcount: [OK] srcFilename = '" + srcFilename + "'"); 
            
        }  
    } 
    
    public static int execute() {return 0;}
    
}

3 个答案:

答案 0 :(得分:0)

Java Class类具有一些有用的方法。您可以使用getClass().getSimpleName()。在运行时,根据对象的类型调用此方法。

答案 1 :(得分:0)

尝试使用此方法:

this.getClass().getCanonicalName()this.getClass().getSimpleName()

如果它是一个匿名类,则应使用this.getClass().getSuperclass().getName()

答案 2 :(得分:0)

您可以执行以下操作:

System.out.println("Class name: " + getClass().getName());

哪个将返回foo.bar.Baz(假设您的班级名为Baz,且位于foo.bar包中)

或者您可以 System.out.println("Class name: " + getClass().getSimpleName());

哪个会简单地返回'Foo'

您可能会发现与此相关的问题很有帮助:What is the difference between canonical name, simple name and class name in Java Class?

编辑:该问题询问如何通过“ main”方法执行此操作,该方法可以理解为public static void main(String[] args)或给定类层次结构中的主要方法。由于问题一直在讨论由多个类继承的方法,因此我将“ main”理解为“ primary”。对于public static void main(String[] args),此答案不起作用,因为getClass()是实例方法,不能从静态上下文中调用。