Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java开源框架中编辑一个类的最佳方法_Java_Inheritance - Fatal编程技术网

在java开源框架中编辑一个类的最佳方法

在java开源框架中编辑一个类的最佳方法,java,inheritance,Java,Inheritance,我使用的是一个开源框架(确切地说是libGDX),但是我想编辑一个类的内部行为,并按原样使用框架的其余部分。问题是,在扩展该类时,我无法访问该类的受保护成员。我不知道反思是否是游戏中最好的东西。该类在框架的其他类中使用,我也想使用它们 编辑:发现成员仅受保护(原始问题包括私人成员),但我无法访问包外的成员三个选项: 你向图书馆后面的社区推荐一个补丁。试着说服所有者修改他们的代码——这样你的问题就可以以合理的方式得到解决 您可以创建自己的私有fork。它是开源的 是的,您可以使用反射。这一个排在

我使用的是一个开源框架(确切地说是libGDX),但是我想编辑一个类的内部行为,并按原样使用框架的其余部分。问题是,在扩展该类时,我无法访问该类的受保护成员。我不知道反思是否是游戏中最好的东西。该类在框架的其他类中使用,我也想使用它们

编辑:发现成员仅受保护(原始问题包括私人成员),但我无法访问包外的成员

三个选项:

  • 你向图书馆后面的社区推荐一个补丁。试着说服所有者修改他们的代码——这样你的问题就可以以合理的方式得到解决
  • 您可以创建自己的私有fork。它是开源的
  • 是的,您可以使用反射。这一个排在最后,因为反射很容易出错,一旦有人开始使用安全管理器,或者库所有者进行更改(例如重命名类或字段),反射就会中断。有关更多详细信息,请参阅
  • 使用继承,您必须在项目内创建与目标类包名称匹配的包。在那里创建子类,以便可以访问受保护的成员。 我认为,哪种选择对你更有利是显而易见的——尽管最初这意味着要做更多的工作,让人们相信你的想法是有价值的

或者,你可能会问自己,你的想法是否真的是个好主意。也许你只是不明白如何正确使用这个库?但鉴于你目前的投入,我们无能为力

如果它是开源的,为什么不为它做点贡献来改进它或fork,而不是做一些疯狂的事情呢?以我的互联网速度和cpu,在我自己编译这个框架之前,我想问一个更好的问题,那就是为什么你要修补这个库。如果只是访问一些私有字段,那么反射可以为您做到这一点。但我首先要考虑为什么这些领域首先是私有的。如果它们不是供公众使用的,那么最好不要这样做。开发人员完全可以随意更改私有实现细节,这样您的聪明黑客就可以在下一版本的库中停止工作。有人与您有相同的意图,并建议将默认值更改为
受保护的
,以便更方便地访问。如果您愿意,您可能想在那里提供一些信息。这并不意味着我完全同意这种或那种方式。@GhostCat将我的解决方案添加到您的回答中,因此没有其他选择,而是编译整个框架?(无法说服他们更改代码,因为这些更改不像他们的代码那样通用)@MichalLebeda编译整个框架是您在这条道路上遇到的最小问题。