在Java中使用instanceof

4
我正在尝试实现一个s-java编译器的变体。为此,我创建了几个表示不同变量的类。在某些时候,我想要检查这样的赋值语句是否合法:int a = b (b可以是任何Variable)。因此,我创建了一个IntVariable a实例,而b是某个Variable的实例,并且我正在检查b instanceof a以确定b是否可以被实际分配到a中。这只是instanceof用法的一个示例,我还有其他情况(b可能是字符串文字或数字),我正在使用instanceof来查看我知道存在且合法的选项,以确定赋值是否合法。
我的问题是:是否可以更好地完成这项工作而不使用instanceof,或者我必须接受这个事实,即虽然它不太美观,但仍然有效,而其他方法则更加复杂?
编辑:
public boolean convertable(Type other) {

  if (other instanceof FloatType || other instanceof DoubleType) {
     return true;
  }

     return false;
 }

请添加您当前的代码片段,这样更容易理解。 - stinepike
2个回答

0
您还可以创建一种称为“Type”的特殊元类,它表示类型。 对于每种具体类型(例如IntType、FloatType),您都可以创建一个新类。然后,您的变量可以有一个getType()-方法,该方法返回对特定类型的引用。现在,您可以直接使用“==”比较类型。然后,“Type”可以有一个方法,返回可转换为第一个类型的类型列表。
例如:
interface Type
{
    public Collection<Type> getConvertibleTypes();
}

然后是一个IntType:

class IntType implements Type
{
    public static final IntType INST = new IntType();

    private IntType()
    {
    }

    public Collection<Type> getConvertibleTypes()
    {
        Collection<Type> v = new Vector<Type>();
        v.add(FloatType.INST);
        return v;
    }
}

0

由于你正在开发一个s-java编译器,我认为如果你获取otherclass对象,你可以做更多的事情。

Class otherClass = other.getClass();

一旦你有了otherClass,你就可以做:

otherClass.getClasses()

返回一个数组,其中包含代表由此Class对象表示的类的所有公共类和接口的Class对象。

otherClass.getDeclaredClasses()

返回一个数组,其中包含反映由此Class对象表示的类声明为成员的所有类和接口的Class对象。

以下是参考资料:

Java反射教程:http://docs.oracle.com/javase/tutorial/reflect/class/classNew.html

Java反射API:http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接