【问题标题】:Accessing current object's sibling method访问当前对象的兄弟方法
【发布时间】:2015-02-18 08:22:46
【问题描述】:

我有两个(兄弟)类,都是同一个父类的子类。 Parent包含了两个兄弟共享的所有方法,而兄弟类只包含不共享的方法并且有不同的实现。

例子,

class Parent() {
}
class Sibling1 extends Parent() {
    byte[] sharedSecret;
    int sharedSecretLength;
    public generateKey() {
        sharedSecret = keyAgree.generateSecret());
        sharedSecretLength = sharedSecret.length);
    }
}
class Sibling2 extends Parent() {
    byte[] sharedSecret2;
    int sharedSecretLength2;
    public generateKey() {
        sharedSecret2 = new byte[sharedSecretLength];
        sharedSecretLength2 = keyAgree.generateSecret(sharedSecret2, 0);
    }
    public int getSharedSecretLength() {
        return sharedSecretLength();
    }
}

如您所见,两者都包含相同的方法,但实现方式不同。我的问题是,如果创建了两个类(sibling1 和sibling2)的对象并且成功生成了obj2 generateKey 取决于obj1 的sharedSecretLength。例如,

Parent obj1 = new Sibling1();
Parent obj2 = new Sibling2();

obj1 在不同的类(我创建的服务器类)中实例化,obj2 在不同的类(我创建的客户端)中实例化。如果 obj1 调用它自己的 generateKey --> ((Sibling1)obj1).generateKey(),我如何在同一个对象 (obj1) 上使用 getSharedSecretLength 将所需信息传递给 obj2 的 generateKey 以成功生成?我试过类似的东西(在 obj2 的 generateKey() 中):

sharedSecret2 = new byte[Sibling1.sharedSecretLength];

...它没有工作。在 Sibling2 类中创建 Sibling1 obj1 然后这样调用它,例如,

Sibling1 xx = null;
.
.
sharedSecret2 = new byte[((Sibling1)xx).sharedSecretLength];

不起作用,因为 xx 是新对象。我正在尝试使用旧的 obj,它在其中生成它的密钥并包含非 0 的 sharedSecretLength

如果 obj1 和 obj2 都在同一个类中创建,那就更容易了。

请帮我指出正确的方向

【问题讨论】:

  • generateKey() 方法的返回类型在哪里?
  • Sibling1Sibling2 彼此不了解。他们甚至不知道对方的存在。为什么ArrayList 会关心有人创建了同样继承自AbstractCollectionHashSet。考虑到这一点,你到底在问什么?

标签: java class methods siblings


【解决方案1】:

代替

((Sibling1)xx).sharedSecretLength

这样称呼

((Sibling1)xx).getSharedSecretLength()

在 java 中,如果它不接受参数并且它不能按字段名称工作,则您已传递空括号,您必须提供与您定义的方法名称相同的方法名称。

【讨论】:

  • 我认为 OP 假设 Sibling2 以某种方式可以访问 Sibling1 实例。不是如何转换和调用方法...
【解决方案2】:

听起来你应该像这样重构,以便 Sibling2 上的 generateKey 方法具有它需要的参数:

Sibling1 obj1 = new Sibling1();
obj1.generateKey();
Siblibg2 obj2 = new Sibling2();
obj2.generateKey(obj1.getSharedSecretLength());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2014-02-05
    • 2019-11-11
    • 1970-01-01
    • 2016-08-21
    • 2019-08-04
    • 1970-01-01
    相关资源
    最近更新 更多