我无法找到如何让一个变量(或不变)的类型String,比如typeof(variable),与科特林语言.怎么做到这一点?
我见过使用过的代码log4j,它logger是为给定的Logger使用而获取的
static public Logger getLogger(String name)
Run Code Online (Sandbox Code Playgroud)
和
static public Logger getLogger(Class clazz)
Run Code Online (Sandbox Code Playgroud)
与前api明确传递getSimpleName(),而后者使用getName()传递Class.这两者有区别吗?如果我将各种包配置为在log4j.properties文件中的不同级别进行日志记录会影响吗?
反射类和方法以及类加载器等需要所谓的"二进制"类名来使用.
问题是,如果一个人只有一个完全限定的名称,即一个人在源代码中使用的名称,那么如何获得二进制名称.
例如:
package frege;
public static class RT {
....
public static class X { .... }
}
Run Code Online (Sandbox Code Playgroud)
该类的完全限定名称将是frege.RT.X.然而,要获得类对象,需要编写:
Class.forName("frege.RT$X")
Run Code Online (Sandbox Code Playgroud)
并不是
Class.forName("frege.RT.X") // fails with ClassNotFoundException
Run Code Online (Sandbox Code Playgroud)
因为X碰巧是一个内在的阶级frege.RT.
一种可能的,但笨拙的,解决办法是更换.与$向后,一个接一个,直到Class.forName()不扔ClassNotFoundException了或者有没有更多的.替换.
有没有更好/众所周知/标准的解决方案?我看着在API文档Class,CLassLoader并java.lang.reflect但没有发现任何有用.
Java Class.getName()和Class.getCanonicalName()?有什么区别?
我想将调用活动与其他人进行比较,以了解哪一个称为当前活动.我试过了:
getCallingActivity().getClassName().toString().equals(MainActivity.class.toString())
Run Code Online (Sandbox Code Playgroud)
它不起作用,除了在调用Intent中传递一个值,我们如何使用getCallingActivity()或者比较类getCallingPackage()?