gpt4 book ai didi

Java静态或继承变量

转载 作者:搜寻专家 更新时间:2023-11-01 00:53:54 27 4
gpt4 key购买 nike

假设我有 3 个类 A、B、C 和我的主类。B扩展了A。我想在所有这些中使用扫描仪,包括我的 main.我应该通过继承移动扫描仪还是应该使用静态并在我的 main 中声明我的扫描仪?

我试着看这里但没有得到一个更好的明确答案: Is there any way I can use a Scanner object in a different class?

public class Main {
public static Scanner staticScanner = new Scanner (System.in);
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
A a = new A(sc);
C c = new C();
c.cDoSomething(sc);
sc.close();
}

public class A {
private Scanner sc;
public A (Scanner sc){
this.sc = sc;
}
public void aDoSomething(){
B b = new B();
b.bDoSomething(sc);

}

public class B extends A {
public void bDoSomething(Scanner sc){

}

public class C {
public void cDoSomething(Scanner sc){

}

就像我上面说的,我想了解哪种方法更好并且是正确的使用方法。staticScanner 并由我的主类调用它或根据需要在类之间移动我的 Scanner sc

最佳答案

我认为这里的答案可能取决于底层类和情况的一些细节,特别是关于扫描器的状态与类中其他变量的状态的耦合程度以及有多少单独的方法或调用是必需的。

但是,一般来说,如果在方法调用之间类 C 中没有保留内部状态,我个人更喜欢 c.doSomething(sc);。 IE。由于在 C

相反的论点是,如果我们在 Scanner 周围创建一个有效的包装器(或某种形式的装饰器),那么将扫描器传递给构造函数中的类并保留对它的引用是非常有意义的。 IE。如果我们想要这样的东西:

MyReader reader = new MyReader(scanner);
MyObject myObject = reader.readNextMyObject();

但是,我认为如果我们通过代码中交错的多个包装器从同一个扫描仪读取数据,那将会非常困惑:

// I think the below would be UGLY, at least imho.
MyReaderA readerA = new MyReaderA(scanner);
MyReaderB readerB = new MyReaderB(scanner);
MyObjectX obj1 = readerA.readMyObject();
MyObjectY obj2 = readerB.readMyObject();

我认为两个不同的阅读器在同一个扫描仪上操作并移动其索引会让人感到困惑。

关于Java静态或继承变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57400782/

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