【问题标题】:Getting class name获取类名
【发布时间】:2021-01-14 01:55:15
【问题描述】:

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

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

提前谢谢大家,感谢任何帮助!

编辑: 大家好!

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

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;}
    
}

【问题讨论】:

  • 请提供您到目前为止所做的工作,并说明您想要实现的具体内容。一般object.getClass().getName();返回object的类名。
  • “这个方法”是实例方法还是静态方法?
  • 它是一个静态的,我的想法是主要方法在我所有的类上都非常相似,除了执行部分,所以我计划为每个类编写不同的执行然后通过该执行程序的文件名并显示结果。

标签: java string class inheritance polymorphism


【解决方案1】:

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

【讨论】:

  • 你不能在静态方法中使用它,并且 OP 谈到了 main 方法(通常是静态的),所以这很可能不能解决 OP 的问题。
【解决方案2】:

尝试使用以下方法:

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

如果是匿名类,你应该使用this.getClass().getSuperclass().getName()

【讨论】:

  • 你不能在静态方法中使用它,并且 OP 谈到了 main 方法(通常是静态的),所以这很可能不能解决 OP 的问题。
  • 我知道作者想创建 Admin.class 然后从这个类继承子类。所以他可以在toString()customGetClass()方法中的某个地方使用这些方法
【解决方案3】:

你可以这样做:

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() 是一个实例方法,不能从静态上下文中调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 2011-02-04
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多