访问Java的私有字段

时间:2012-02-25 20:00:37

标签: java imageview private-members

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的值

2 个答案:

答案 0 :(得分:6)

通过不尝试获取私有实现细节来修复它。基本上你不应该这样做。即使您仍在使用此版本的ImageView,您的代码也会变得脆弱,并且容易受到版本之间的更改的影响。它是私有的全部意义是停止你直接访问它。

(当它是 float 字段时,称它为privateStringField.setFloat(layeredPane, 2.0f)很奇怪,顺便说一句......)

答案 1 :(得分:3)

首先,你为什么要使用2.0?我认为vAlign使用java.awt.Component contants进行BOTTOM_ALIGNMENT,CENTER_ALIGNMENT和TOP_ALIGNMENT分别保持1.0f,0.5f和0.0f,因此值2.0可能没有多大意义。

无论如何,因为它是一个私人领域,不要直接摆弄它并通过适当的方式改变它。看来这个私有字段是通过属性设置的:

Object alignment = attr.getAttribute(HTML.Attribute.ALIGN);