Class JavaJDK替换本机类文件

Class JavaJDK替换本机类文件,class,replace,native,java,Class,Replace,Native,Java,我有ImageView.class如何让程序使用它而不是本机 有人告诉我有必要使用ClassFileTransformer和ClassLoader,但我找不到一个有效的示例我想你真正想做的是 扩展HTMLEditorKit并覆盖getViewFactory() 让它返回一个扩展HTMLEditorKit.HTMLFactory 在该类中,重写create()以返回您的自定义视图,否则返回super.create() 像这样: class MyImageKit extends HTMLEditor

我有
ImageView.class
如何让程序使用它而不是本机


有人告诉我有必要使用
ClassFileTransformer
ClassLoader
,但我找不到一个有效的示例我想你真正想做的是

  • 扩展
    HTMLEditorKit
    并覆盖
    getViewFactory()
  • 让它返回一个扩展
    HTMLEditorKit.HTMLFactory
  • 在该类中,重写
    create()
    以返回您的自定义视图,否则返回
    super.create()
  • 像这样:

    class MyImageKit extends HTMLEditorKit {
        private static final MyImageFactory myFactory = new MyImageFactory();
    
        public ViewFactory getViewFactory() {
            return myFactory;
        }
    
        static class MyImageFactory extends HTMLFactory {
            public View create(Element elem) {
                Object type = elem.getAttributes()
                                  .getAttribute(StyleConstants.NameAttribute);
                if(type == HTML.Tag.IMG) {
                    return new MyImageView(elem);
                } else {
                    return super.create(elem);
                }
            }
        }
    }
    
    class MyImageView extends ImageView {
        MyImageView(Element elem) {
            super(elem);
        }
    
        protected void setPropertiesFromAttributes() {
            super.setPropertiesFromAttributes();
            try {
                ImageView.class.getDeclaredField("vAlign").set(this, new Float(0.75f));
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    不,我不需要它。我需要将本机类替换为另一个类。第258-267行。无法设置Align=.75 f;或者其他-这是我的问题您可以覆盖
    setPropertiesFromAttributes()
    并使用反射设置
    vAlign=0.75f
    class MyImageKit extends HTMLEditorKit {
        private static final MyImageFactory myFactory = new MyImageFactory();
    
        public ViewFactory getViewFactory() {
            return myFactory;
        }
    
        static class MyImageFactory extends HTMLFactory {
            public View create(Element elem) {
                Object type = elem.getAttributes()
                                  .getAttribute(StyleConstants.NameAttribute);
                if(type == HTML.Tag.IMG) {
                    return new MyImageView(elem);
                } else {
                    return super.create(elem);
                }
            }
        }
    }
    
    class MyImageView extends ImageView {
        MyImageView(Element elem) {
            super(elem);
        }
    
        protected void setPropertiesFromAttributes() {
            super.setPropertiesFromAttributes();
            try {
                ImageView.class.getDeclaredField("vAlign").set(this, new Float(0.75f));
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    }