首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(在调用超类中的方法之前),在哪里放置下传?

(在调用超类中的方法之前),在哪里放置下传?
EN

Stack Overflow用户
提问于 2017-07-05 09:07:57
回答 1查看 149关注 0票数 1

我正在编写一个使用UnfoldingMaps库(http://unfoldingmaps.org/javadoc/index.html?overview-summary.html)的作业。

该赋值有一个名为CommonMarker的类。该类继承自类SimplePointMarker,该类继承自类AbstractMarker。AbstractMarker实现了接口标记器。

我对调用isInside方法的方法isInside中发生的转换感到困惑。

下面是我们必须完成的框架代码。的目标是为第一个标记设置实例变量lastSelected,它发现mouseX和mouseY位于。我们将使用在isInside抽象类中定义的UnfoldingMap (UnfoldingMap m、float x、float y)方法来检查一个位置是否在标记中。

lastSelected被定义为:

代码语言:javascript
复制
private CommonMarker lastSelected;

给出的基本代码是:

代码语言:javascript
复制
private void selectMarkerIfHover(List<Marker> markers)
    {
        // TODO: Implement this method
    }

我的解决方案如下所示,在将m赋值给lastSelected之前,我将向下转换。

代码语言:javascript
复制
for(Marker m:markers)
        {
            if(m.isInside(map, mouseX, mouseY))
            {
                m.setSelected(true);
                lastSelected = (CommonMarker)m;
                return;
            }
        }

教练给出的解决方案与我的解决方案略有不同,甚至在调用inInside之前就完成了下拉式转换。

代码语言:javascript
复制
for (Marker m : markers) 
        {
            CommonMarker marker = (CommonMarker)m;
            if (marker.isInside(map,  mouseX, mouseY)) 
            {
                marker.setSelected(true);                   
                lastSelected = marker;
                return;
            }
        }

我不知道为什么在调用方法isInside之前标记会被“下线”。这是最佳做法吗?请分享您的想法,我对Java非常陌生,我已经尝试尽可能多地跟踪代码,但它对我来说还是相当难以抗拒的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-05 09:11:39

有一个不同之处:您的版本将抛出一个ClassCastException,而m (为m.isInside(map, mouseX, mouseY)提供true )也是,而不是CommonMarker的一个实例。

而第二个解决方案将抛出该异常,以防该列表中的任何标记都不是CommonMarker (准确地说,在某些m之前的任何对象对if条件都是正确的)。

从这个意义上讲,行为上存在着微妙的差异。如果这在您的环境中很重要,则取决于您的环境。我的直觉是:如果这种差异在你的环境中很重要--那么我会把这看作是一种设计的味道,我会进一步研究这一背景。

除此之外,我认为这两种选择都是“可以的”。但理想情况下,您应该使事情更加明确,例如:

代码语言:javascript
复制
if (m instanceOf CommonMarker) {
  ... cast
} else {
  ... throw exception with meaningful error message

当然,第二个版本的性能影响最小,因为每个循环迭代都执行强制转换;而不是只执行一次。但是,对于性能而言,实例/强制转换都是无关紧要的。

话虽如此:许多人认为自己是一种设计的味道。所以,再次-我会后退一步,如果有其他的选择,以避免完全沮丧。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44921718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档