通过合成(接口和类)键入Casting

时间:2016-02-06 04:08:06

标签: java generics casting composition bag

当我尝试使用同样包含generics的类方法(其中两个类都实现接口)时,我有一个主要的断开连接。我有一个SetInterface接口,其中包含我Set类的方法。我的ProfileInterface接口和Profile类也是如此。在我的Profile类中,我有以下类型转换引用Set类:

private Set<ProfileInterface> followBag = new Set<ProfileInterface>();

基本上,我们在数据结构类中学习Array BagsLinked Bags等。我的问题是我希望在SetProfile中使用Composition数据结构类的方法。我遇到的一个问题是我需要在Profile类中创建一个方法,该方法交叉引用给定数组中的项目以查看该Profile对象是否“跟随”另一个Profile如果没有,则建议遵循该对象(赋值是使用数据结构完成类似于Twitter或Facebook的操作)。这是我到目前为止创建的方法以及我无法通过的错误(从顶部开始的第三行):

    public ProfileInterface recommend(){
    ProfileInterface recommended;
    ProfileInterface thisProfile = new Profile(); //  <--Here is the question
    for(int index = 0; index < followBag.getCurrentSize(); index++){
        ProfileInterface follows = followBag[index];
        for(int followedFollowers = 0; followedFollowers < follows.getCurrentSize(); followedFollowers++) { // <--Question here also
            //if Profile's match, do nothing
            //if Profile's do not match, set recommended == the Profile
        }
    }
    return recommended;
}

请原谅我的伪代码,因为我还在努力。但是我不能继续使用这种方法,直到我完全理解我需要做什么来使第三次演员变得正确并理解我的其他关注点(第二个音符)是否可行。

我是第二类Java,我似乎无法通过这些问题。理想情况下,我希望一个成员或多个成员能够将其愚蠢地降低到5岁,这样我才能完全掌握它。我了解Profile类与我的Composition类之间存在“有”关系(Set)。我也知道,因为我按照我的方式投放了followBag,所以它可以使用ProfileInterfaceSet方法。但是如果可能的话,我想用一些例子来解释如何在一个方法中正确地输入一个数组的项目,或者在这个例子中的Set中,并将其转换为给定的对象?我希望将此对象(在本例中为thisProfile)填充到给定索引以进行比较。但我需要澄清两件事:

A)对类型转换的对象会发生什么变化,如下所示: ProfileInterface thisProfile = new Profile();

因为我指的是接口和实现它的类?这意味着,如果我的Profile()类中有更多方法,那么thisProfile只能访问哪些方法;界面或类?

B)我应该简单地拨打ProfileInterface thisProfile,然后将thisProfile的引用分配给我的内部for循环中的特定索引吗?

C)我的第二个注释:我在IntelliJ中收到错误,声明它是“cannot resolve method getCurrentSize()”。我不明白这一点,因为我创建了follows以上的一行。我认为ProfileInterface follows = followBag[index]会将数组的给定Profile索引设置为稍后在我的代码中使用的索引。这个错误源于我上面的困惑。所以,一旦我明确了解我做错了什么,我就会很肯定,我相信我会妥善解决它。

谢谢大家,我一如既往地期待听到您的回复!

1 个答案:

答案 0 :(得分:0)

  

A)对类型转换的对象会发生什么变化如下:ProfileInterface thisProfile = new Profile();

首先,这是一个作业,而不是一个类型转换。

  

因为我指的是接口和实现它的类?这意味着,如果我的Profile()类中有更多方法,那么thisProfile只能访问哪些方法;界面或类?

您只能访问ProfileInterface中的方法。如果这是一个问题,我建议您只需将ProfileInterface更改为Profile。私有变量的类型应该没有问题重构。

  

C)我的第二个注释:我在IntelliJ中收到错误,声明它“无法解析方法getCurrentSize()”。我不明白,因为我创建了一个上面的一行。

这意味着followBagSet,并未实现名为getCurrentSize()的方法。

  

我认为ProfileInterface跟随= followBag [index]会将给定的数组索引设置为等于稍后在我的代码中使用的索引。

这与问题C的第一部分无关。followBag不是数组。我不确定你在这里尝试做什么,但如果你是C#程序员,Java不会使用相同的语法。 []不能用于访问Collection的成员。您必须使用get()或相关方法。

我真的不确定你在问题B中想说的是什么。我会摆脱语法错误,然后再问一遍,这里有些东西,我无法弄明白你到底在哪里继续。