如何在单个范围中的不同情况下使用一个变量作为不同的对象



通常,在一个范围中不可能将一个变量(一个标识符)用作两个或多个对象。我的意思是以下程序无效:

public void HashMachine() {
    ClassA MyObj;
    //Some functions on MyObj here
    ClassB MyObj;
    //Some other functions on the new MyObj here.
}

,但我想知道在不同情况下是否可以将单个变量用作两个不同的对象,如下所示:

public void HashMachine(int ObjType) {
    switch(ObjType){
          case 1:
              ClassA MyObj;
              //Some functions here for this MyObj
              break;
          case 2:
              ClassB MyObj;
              //some other functions for this MyObj
              break;
    }
}

不幸的是,以上程序也是错误的,我无法运行。

所以,这是我的问题:

我可以将一个标识符(一个变量)用于一个范围中的两个不同对象吗?(每个针对特定情况/条件)。

为什么我要这样做?

  • 我认为,以这种方式,程序比您必须使用不同变量的表单
  • 当我想写一个Java卡小程序时,在Java卡中,在不存在的垃圾收集器中,最好拥有对象和变量。

您不能在同一范围内两次使用相同的名称。但是,您可以在案例语句中创建新的范围,您可以在其中再次使用该名称。例如:

switch(ObjType)
{
    case 1:
    {
        ClassA MyObj;
        //some code
    }
    break;
    case 2:
    {
        ClassB MyObj;
        //some code
    }
}

在这里,ClassA MyObj到程序reacehs第二个案例语句时的范围不超出范围,因此ClassB MyObj是合法的。

是。你可以这样做。这是抽象的概念。您可以在下面喜欢

public interface MyInterface{...}
public class ClassA implements MyInterface {...}
public class ClassB implements MyInterface {...}

然后,您可以通过具有MyInterface的参考对象来参考ClassAClassB类的对象。

MyInterface MyObj;
switch(ObjType){
          case 1:
              MyObj = new ClassA();
              //Some functions here
              break;
          case 2:
              MyObj = new ClassB();
              //some other functions
              break;
    }

Das Louis在他的示例中提供了另一个选择。

我认为您正在寻找的是联合。 但是,它在Java中不存在。我可以找到这个链接,我希望对您有用http://lambda-the-the---------------org/node/2694#comment-40453

我认为以这种方式该程序比您必须的表格要短 使用不同的变量

也许可以,但是可读性

我想编写一个Java卡小程序,在Java卡中,不存在垃圾收集器,最好拥有对象和变量。

我不确定我的句子是否正确理解。

得出结论,我强烈建议您不要为您的代码添加歧义

最新更新