如何在一个范围内将一个变量用作不同对象的不同对象?

时间:2015-05-06 08:30:34

标签: java

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

DELETE FROM TB_VALIDATE_PARAM 
USING TB_VALIDATE_PARAM AS TP INNER JOIN information_schema.COLUMNS AS COL
WHERE UPPER(CONCAT(TP.c_object_id, TP.c_column_code)) <> UPPER(CONCAT(COL.TABLE_NAME, COL.COLUMN_NAME))
AND COL.TABLE_SCHEMA = 'jlink'

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

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

不幸的是上面的程序也错了,我无法运行它。

所以,这是我的问题:

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

我为什么要这样做?

  • 我认为通过这种方式,程序比必须使用不同变量的形式短
  • 由于我想编写一个Java Card小程序,并且在Java Card,垃圾收集器中没有,最好有较少对象和变量。

3 个答案:

答案 0 :(得分:4)

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

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

此处,ClassA MyObj在程序重新生成第二个案例陈述时超出了范围,因此ClassB MyObj是合法的。

答案 1 :(得分:1)

是。你可以这样做。这是抽象的概念。你可以这样做

public interface MyInterface{...}

public class ClassA implements MyInterface {...}

public class ClassB implements MyInterface {...}

然后,您可以通过引用ClassA引用对象来引用类ClassBMyInterface的对象。

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

Das Louis在他的例子中提供了另一种选择。

答案 2 :(得分:1)

我认为你所寻找的是一个工会。   但它并不存在于Java中。我可以找到这个链接,希望对你有用http://lambda-the-ultimate.org/node/2694#comment-40453

  

我认为通过这种方式,程序比你必须的形式更短   使用不同的变量

可能确实如此,但可读性呢?

  

由于我想编写一个Java Card小程序,并且在Java Card中没有垃圾收集器,所以最好有对象和变量。

我不确定我的判断是否正确。

最后,我强烈建议您不要在代码中添加歧义