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();
}
}
}