Java 如何将一个变量用作单个范围内不同情况下的不同对象?
通常,不可能使用一个变量(一个标识符)作为一个范围中的两个或多个对象。我的意思是,以下程序将不起作用:Java 如何将一个变量用作单个范围内不同情况下的不同对象?,java,Java,通常,不可能使用一个变量(一个标识符)作为一个范围中的两个或多个对象。我的意思是,以下程序将不起作用: public void HashMachine() { ClassA MyObj; //Some functions on MyObj here ClassB MyObj; //Some other functions on the new MyObj here. } 但我想知道,在以下不同情况下,是否可以将单个变量用作两个不同的对象: public void
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
在程序到达第二个case语句时已超出范围,因此ClassB MyObj
是合法的。在同一范围内不能两次使用同一名称。但是,您可以在case语句中创建新的作用域,以便再次使用该名称。例如:
switch(ObjType)
{
case 1:
{
ClassA MyObj;
//some code
}
break;
case 2:
{
ClassB MyObj;
//some code
}
}
在这里,
ClassA MyObj
在程序到达第二个case语句时已超出范围,因此ClassB MyObj
是合法的。是。你可以这样做。这是抽象的概念。你可以像下面这样做
public interface MyInterface{...}
public class ClassA implements MyInterface {...}
public class ClassB implements MyInterface {...}
然后,通过使用MyInterface
的引用对象,可以引用类ClassA
或ClassB
的对象
MyInterface MyObj;
switch(ObjType){
case 1:
MyObj = new ClassA();
//Some functions here
break;
case 2:
MyObj = new ClassB();
//some other functions
break;
}
Das Louis在其示例中提供了另一个选项。是。你可以这样做。这是抽象的概念。你可以像下面这样做
public interface MyInterface{...}
public class ClassA implements MyInterface {...}
public class ClassB implements MyInterface {...}
然后,通过使用MyInterface
的引用对象,可以引用类ClassA
或ClassB
的对象
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中并不存在。我可以找到这个链接,我希望对你有用 我认为这样的程序比你必须的形式要短 使用不同的变量 也许是这样,但是可读性呢 因为我想写一个Java卡小程序,在Java卡中,垃圾收集器不存在,最好有对象和变量 我不确定我是否正确理解了你的句子
总之,我强烈建议您不要在代码中添加歧义我认为您需要的是一个联盟。 然而,它在Java中并不存在。我可以找到这个链接,我希望对你有用 我认为这样的程序比你必须的形式要短 使用不同的变量 也许是这样,但是可读性呢 因为我想写一个Java卡小程序,在Java卡中,垃圾收集器不存在,最好有对象和变量 我不确定我是否正确理解了你的句子
最后,我强烈建议您不要在代码中添加歧义亲爱的down投票者,请告诉我这个问题出了什么问题?我也看不出有什么问题。。。这里有一个+1;-)你应该看看继承。如果您使所有对象类型都从单个“根”对象继承,那么您可以将所有对象作为该“根”对象的实例传递。亲爱的down投票者,请告诉我问题出了什么问题?我也看不出有任何问题。。。这里有一个+1;-)你应该看看继承。如果使所有对象类型都从单个“根”对象继承,那么就可以将所有对象作为该“根”对象的实例进行传递。我更正了这一部分。我的意思是,由于Java卡中没有GC,同时具有较少活动对象,程序员有利于为其程序的其他部分提供更多可用内存。我更正了这一部分。我的意思是,由于Java卡中没有GC,同时具有较少活动对象,程序员有利于为其程序的其他部分提供更多可用内存。如果可能,您甚至不需要
开关语句。您可以使用方法重写。如果可能,您甚至不需要开关
语句。您可以使用方法重写。