Java:允许自定义类添加到java.awt.image?

时间:2011-03-24 12:22:18

标签: java package

我非常感觉答案在某个地方,但要么我缺乏正确的关键词,要么只是应该睡一觉,但这里是;〜):

我需要扩展BufferedImage,这是实现这一目标的唯一方法。不管MacGyvering整个类都是让新类放在java.awt.image中,因为它包含一个我只需要包的可见字段访问。 Normaly,有理由不做这样的事情,但是如果你查看来源,你会发现在这种特殊情况下这不是真的。

所以我测试了它,它编译并且似乎运行。

但我能依靠它吗?是允许的吗?有什么东西可以阻止我向java的预定义系统包添加类吗?或者这只是正确的方法而没有人告诉我?

更新

已经提供的回答表明存在法律问题的可能性(如果做某事正确意味着违反某些法律,而不是我的默认解决方案经常对这些法律不感兴趣;-)以及改变行为的可能性超级阶级(在这种情况下非常不可能)。如果就是这样,我就这样做......

UPDATE2

大! Java是一个受保护的软件包名称......所以我真的需要MacGyver这个......

UPDATE3

我只是想知道为什么我不能获得属性哈希键。 fn getPropertyNames记录如下:返回由getProperty(String)识别的名称数组 ...让我们看一下源代码:

public String[] getPropertyNames() {
     return null;
}

我读过的最佳代码......

2 个答案:

答案 0 :(得分:1)

好的,这就是我如何处理这个问题:

public class MyBi extends BufferedImage
{
    private final BufferedImage realBufferedImage;

    public MyBi(BufferedImage bi)
    {
        super(0, 0, TYPE_INT_ARGB);
        realBufferedImage = bi;
    }

    // Add methods for managing your extra data

    // For every method in BufferedImage, override it like so:
    public void setData(Raster r)
    {
        realBufferedImage.setData(r);
    }
}

手动执行这一过程非常繁琐,但NetBeans支持委派。 按 Alt 插入,选择Delegate Method...,选择realBufferedImage作为左侧面板中的字段,然后在右侧面板中选中BufferedImage,点击OK。即时授权。

这应该有效,因为尽管BufferedImage的字段在包范围内,但包中没有其他内容可以访问它们。

答案 1 :(得分:0)

您没有“添加”到java.awt.Image。在您自己的包中,您可以扩展课程并随意进行。

有时,在开源项目中,您可以将您的课程提交回项目并让它成为项目的一部分。