gpt4 book ai didi

java - 需要创建一个只能从 G 实例化的 A 类

转载 作者:行者123 更新时间:2023-12-02 05:04:33 24 4
gpt4 key购买 nike

我有一个类 G,它将创建类的实例,如 A B C D,每个类位于不同的包中,

在创建 A B C D 的实例时,每个 A B C D 都有不同的工厂方法,因为参数不同。

并且没有其他类可以调用这些 A B C D 类的工厂方法。

有什么办法可以做到这一点吗?

最佳答案

假设您有

B 级

package com.b;

import com.g.ClassG;

public class ClassB {
private ClassB(int arg1,String arg2){

}

public static ClassB getInstance(Object object) throws Exception {
if(object instanceof ClassG) {
return new ClassB(1, "Shree");
}else {
throw new Exception("instance creation is Only supported for ClassG");
}
}
}

A 级

package com.a;


import com.g.ClassG;

public class ClassA {
private ClassA(int arg1){

}

public static ClassA getInstance(Object object) throws Exception {
if(object instanceof ClassG) {
return new ClassA(1);
}else {
throw new Exception("instance creation is Only supported for ClassG ");
}
}

}

那么如果你将你的G类写成如下

G 级 包 com.g;

import com.a.ClassA;
import com.b.ClassB;

public final class ClassG {

public static void main(String args[]) throws Exception {
ClassG gObject = new ClassG();
ClassA aObject = getClassAInstance(gObject);
ClassB bObject = getClassBInstance(gObject);

}

private static ClassB getClassBInstance(ClassG gObject) throws Exception {
return ClassB.getInstance(gObject);
}

private static ClassA getClassAInstance(ClassG gObject) throws Exception {
return ClassA.getInstance(gObject);
}

}

我认为上述解决方案对您来说已经足够了。

  1. 实例创建的限制放在工厂方法中

  2. G 类是最终的,因此除了 G 类之外,没有任何方法可以创建 ClassA 和 ClassB 实例

让我知道您对此的反馈

关于java - 需要创建一个只能从 G 实例化的 A 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27915327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com