[英]Accessing private fields of a Java
javax.swing.text.html.ImageView; 第111和258-267行
http://javasourcecode.org/html/open-source/jdk/jdk-6u23/javax/swing/text/html/ImageView.java.html
public class ImageView extends View {
....
private float vAlign;
....
}
我的程序:
.....
ImageView layeredPane = (ImageView) view;
Field privateStringField = layeredPane.getClass().getDeclaredField("vAlign");
privateStringField.setAccessible(true);
layeredPane.vAlign = 2.0;
.....
我得到:
Test.java:80:错误:vAlign在ImageView layeredPane.vAlign = 2.0中具有私有访问权限;
我如何解决它? 我需要将值设为2.0
您可以通过不尝试获取私有实现细节来解决此问题。 基本上,您不应该这样做。 即使您仍在使用此版本的ImageView
,您的代码最终也会变得很脆弱,并且容易受到版本之间的更改的影响。 私有化的全部目的是阻止您直接访问它。
您可以使用 privateStringField.setFloat(layeredPane, 2.0f)
但我强烈建议您这样做。
(顺便说一句,当它是一个浮点数字段时,将其称为privateStringField
很奇怪...)
首先,您为什么要使用2.0? 我认为vAlign使用BOTTOM_ALIGNMENT,CENTER_ALIGNMENT和TOP_ALIGNMENT的java.awt.Component竞争者,它们分别持有1.0f,0.5f和0.0f,因此2.0的值可能没有多大意义。
无论如何,由于它是一个私有领域,所以不要直接摆弄它,而要通过适当的方式对其进行更改。 似乎此私有字段是通过属性设置的:
Object alignment = attr.getAttribute(HTML.Attribute.ALIGN);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.