我正在编写一个管理员类,而我正在编写的所有其他类均应继承自该类。在这种情况下,我希望类继承一个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;}
}
答案 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()
是实例方法,不能从静态上下文中调用。