![]() |
1
33
我不会这么做的。它违反了封装,并在实现者不知道的情况下更改了类应该执行的操作的约定。 不过,如果必须这样做,最好的方法是调用
如果返回的类是您自己的,则不会重写;如果是其他类,则该子类已重写它。是的,这是反射,但还是很便宜的。 不过,我确实喜欢你的受保护方法。看起来像这样:
|
![]() |
2
7
你可能想看看Java优化器能做什么。可能不需要手动编码优化。 如果您认为手工编码优化是必要的,那么您描述的受保护方法不是一个好主意,因为它公开了实现的细节。 |
![]() |
3
2
在程序的生命周期中,您希望函数被调用多少次?特定单一方法的反射不应该太差。如果在程序的整个生命周期中不值得花那么多时间,我的建议是保持它的简单性,不要包含小的优化。 雅各伯 |
![]() |
4
1
注释重写特定方法的子类。@重写方法。
在课堂上进行必要的反思工作(即
|
![]() |
5
1
也许有一个更干净的方法通过 Strategy Pattern ,虽然我不知道您的应用程序和数据的其余部分是如何建模的,但看起来它可能适合。 不管怎样,当我面对类似的问题时。根据要处理的数据,可以有一个启发式方法来决定使用哪种策略。 再说一次,我没有足够的信息来了解你的具体用法,看这是否是过度杀戮。但是,对于这种特定的优化,我将避免更改类签名。通常,当我感到有逆流的冲动时,我会把它当作一首歌,说我在设计这个东西的时候没有放弃一个角落,我应该把它重构成一个更干净、更全面的解决方案。 但是要注意的是,如果仅仅基于优化的原因进行重构,几乎不可避免地会导致灾难。如果是这样的话,我会采取上述的反刍方法。它不会更改继承契约,并且当正确完成时,只需要在应用程序的运行时生命周期中需要它的每个子类执行一次。 |
![]() |
6
1
我知道这是个有点老的问题,但为了其他谷歌用户: 我用接口想出了一个不同的解决方案。
或者相反:
|
![]() |
7
1
|
![]() |
8
0
反射可用于确定方法是否被重写。代码有点复杂。例如,您需要知道您有一个运行时类,它是重写该方法的类的子类。
您将一遍又一遍地看到相同的运行时类。所以您可以将签入的结果保存在
查看我的代码
|
![]() |
Rational Redneck · Java结构化方法链接 2 年前 |
![]() |
KianQ · 如何从数组生成SQL Update语句 2 年前 |
![]() |
AJA SMBAT · 我在获取列表而不是绑定方法时遇到问题 2 年前 |
![]() |
dsdsds sdsds · .pop()从原始列表中删除元素[重复] 2 年前 |
![]() |
MatÄj VondráÄek · 如何在c#方法中传递类型? 2 年前 |
![]() |
AISAN · 找不到令人兴奋的符号?[重复] 2 年前 |