做练习的时候就抄了如下方法
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组件,修饰符和子组件?最近我一直在...
官方离线安装包,亲测可用
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资源库:...
Rokon框架中的box2d,在pudn上下载下来的,好资源不要浪费了,与大家分享一下。另外 ,小弟最近资源分比较吃紧,收个3分吧,谢谢~~
用于创建modifiers.json词典的脚本,以方便修饰符。 用法 编辑make-modifiers.py文件,然后将所需的键添加到hotkeys变量中。 例如,将["KH-FG", "grave"],到hotkeys数组中,以创建⌘ `切换窗口的快捷方式。 另请...
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 例子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“],”...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装