做练习的时候就抄了如下方法
public static void printModifiers(final Class<?> dataType){
final int mod=dataType.getModifiers(); //1537 if dataType is Collection.class,
//1537=1024+513=2^10+2^8+1
if(Modifier.isPrivate(mod)) //one class may have more modifiers
U.p("private "); //U.p() is similar to System.out.print()
if(Modifier.isProtected(mod))
U.p("protedted ");
if(Modifier.isPublic(mod))
U.p("public ");
if(Modifier.isAbstract(mod))
U.p("abstract ");
if(Modifier.isFinal(mod))
U.p("final ");
if(Modifier.isNative(mod))
U.p("native ");
if(Modifier.isInterface(mod))
U.p("interface ");
if(Modifier.isStatic(mod))
U.p("static ");
if(Modifier.isStrict(mod))
U.p("strict ");
if(Modifier.isSynchronized(mod))
U.p("synchronized ");
if(Modifier.isTransient(mod))
U.p("transient ");
if(Modifier.isVolatile(mod))
U.p("volatile ");
U.pl(dataType.getName());//U.pl() is similar to System.out.println()
}
public static void main(String[] args){
printModifiers(Collection.class);
}
控制台输出:
public
abstract interface java.util.Collection
看着有点别扭,嗯?怎么多了个abstract?bug?jdk bug?
断点调试、查看源代码
import java.util.Collection; //导入的没错
public interface Collection<E> extends Iterable<E> //接口声明
public interface Iterable<T> //没有继承任何接口
public native int getModifiers(); //Class<T>中的本地方法
public final class Class<T> implements java.io.Serializable,
java.lang.reflect.GenericDeclaration,
java.lang.reflect.Type,
java.lang.reflect.AnnotatedElement ;
public static boolean isAbstract(int mod) { //Modifier中的静态方法实现
return (mod & ABSTRACT) != 0;
}
public static final int ABSTRACT = 0x00000400; //1024=2^10=4^5=4*16^2
//1537&1024=1024
还在怀疑public native int getModifiers()这个本地方法出错了。
上帝这么容易让我找到了jdk5的bug。
反问自己:Collection是abstract的吗?它有abstract方法吗? 恍然大悟,只要有方法都是抽象方法。有点埋怨,java作为一门严格的语言,那么在声明接口的时候也应该强制PG加上abstract,干嘛还来个隐式的?那么反射的时候又干嘛给加上?
小学的时候,考了100分,以为自己长大了能当个伟大的科学家。
分享到:
相关推荐
Java Class and Method Modifiers
CSS-Components-Modifiers-And-Subcomponents-Collection, 通用CSS模块类名称的集合 CSS组件,修饰符和子组件集合web组件的公共CSS组件。修饰符和子组件类名称的集合。什么是CSS组件,修饰符和子组件?最近我一直在...
3. **Modifiers**: 反射提供了`Modifier`类,可以解析和解释类、字段和方法的修饰符,如`public`、`private`、`static`等。 4. **Annotations**: 反射可以用于处理注解,通过`isAnnotationPresent()`检查注解是否...
官方离线安装包,亲测可用
**Rokon_Using_Modifiers** 是一个关于Rokon框架如何结合Box2D物理引擎进行游戏开发的资源集合。Rokon是一个针对Android平台的游戏开发框架,它简化了游戏编程,提供了丰富的功能,使开发者能够快速构建2D游戏。Box...
modifiers是方法修饰符的集合,也是制作更多的方法。 显然,方法修饰符会修改方法。 具体来说,在 Ruby 术语中,它们是类方法,它们: 取一个符号参数,它命名同一个类的实例方法,和返回相同的符号,但导致对命名...
KeyModifiers.Shift也可以直接使用数字4来表示。 RegisterHotKey(Handle, 100, KeyModifiers.Shift, Keys.S); //注册热键Ctrl+B,Id号为101。KeyModifiers.Ctrl也可以直接使用数字2来表示。 RegisterHotKey...
Compose Modifiers Playground IDEA插件的源代码 通过此交互式游乐场了解如何使用Jetpack Compose修改器! 可用的修饰符: 背景 边境 夹子 FillMaxHeight FillMaxSize FillMaxWidth 抵消 填充 旋转 规模 阴影 ...
Synced Modifiers 是一个 Blender 插件,允许您同时向多个对象添加修改器,并使用驱动程序自动同步所有修改器。 如果你想要免费的blender插件、模型等可以看看这个blender资源库:...
用于创建modifiers.json词典的脚本,以方便修饰符。 用法 编辑make-modifiers.py文件,然后将所需的键添加到hotkeys变量中。 例如,将["KH-FG", "grave"],到hotkeys数组中,以创建⌘ `切换窗口的快捷方式。 另请...
NX二次开发UF_PD_ask_business_process_modifiers 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等...
ember install ember-gesture-modifiers 用法 当前仅提供“平移”修改器。 将来会添加更多手势。 平移修饰符 论点 onPanStart-启动平底锅时触发的钩子 onPan-在平底锅更新时触发钩子 onPanEnd-平底锅结束时触发的...
此软件包未在积极开发中,不提供任何支持 高级修饰符 扩展了您可以在 Exp:resso 的商店模块中定义价格修饰符的方式。 执照 麻省理工学院许可证 (MIT) 版权所有 (c) 2014 Jeremy Worboys 特此授予任何人免费获得本...
paths and choices for THELP.CFG will reflect the current session's installation choices: a. CMD - command-line compiler b. IDE - integrated environment 4. Alterations to headers or startup ...
paths and choices for THELP.CFG will reflect the current session's installation choices: a. CMD - command-line compiler b. IDE - integrated environment 4. Alterations to headers or startup ...
MaxWebPortal Modifiers是为开放源代码MaxWebPortal ASP Portal服务器发布的一系列Mod的所在地,可从www.maxwebportal.com获得。 MWPModifiers项目中的开发人员协作并共享MWP Mod的代码,然后将其发布
2、该版本jar包可以解决转json数据报错:can not access a member of class com.fasterxml.jackson.databind.ser.std.NullSerializer with modifiers "private" can not access a member of class ...
AndEngine是一款针对Android平台开发2D游戏的开源引擎,它提供了丰富的功能,使得开发者能够轻松创建高质量的游戏。在这个"ShapeModifiers"的例子中,我们将深入探讨AndEngine如何通过形状修改器(ShapeModifiers)...
草稿js修饰符 模块化状态修饰符yarn add draft-js-modifiers# ornpm i draft-js-modifiers用法 import * as Modifiers from 'draft-js-modifiers'const newEditorState = Modifiers . mergeBlockData ( ...
用法:npm我babel-plugin-jsx-event-modifiers -D或yarn添加babel-plugin-jsx-event-modifiers -D然后在插件示例.babelrc下,将jsx-event-modifiers添加到您的.babelrc文件中:{“ presets “:[” es2015“],”...