繁体   English   中英

如何创建一个新的数据类型,称为标识符,它的每个实例都应该是一个有效的标识符名称?

[英]How can I make a new data type called Identifier that every instance of it should be a valid identifier name?

我可以按照标题中的要求进行这门新课吗,这是我的尝试。

import javax.lang.model.*;

public class Ide{
    public Ide New(String ide){
        if (SourceVersion.isName(ide)) {
            return ide;
        } 
    }
}

但是它无法编译,因为我无法将String ide转换为Ide类型,我该怎么做? 我需要输入Ide类型,谢谢。

此代码有几个问题:

  • Stringfinal 这意味着任何类都不能从String继承。
  • New应该是static ,否则该方法将毫无意义。 要求一个类的实例创建其他实例就像“鸡与蛋”问题一样,只是您一个都没有。
  • 调用方法New 确实不好的样式。 new是Java中的关键字,并且会引起编码错误,使代码的可读性降低...。 而且方法名称不应大写。
  • 即使可以从String扩展类,但String -parameter不会自动成为Ide -instance。 因此, return ide; 不会编译。

解决您的问题的方法是:
使用private构造函数和static工厂方法。 该类只能是包装器类。 只需以适配器样式实现即可提供String提供的所需方法:

class Ide{
    private String str;

    private Ide(String str){
        this.str = str;
    }

    public static Ide createIde(String str)
        throws IllegalArgumentException
    {
        if(validIdentifier(str))
            return new Ide(str);
        else
            throw new IllegalArgumentException("Invalid identifier: " + str);
    }

    //examples for adapter-like method-implementation
    public String toString(){
        return str.toString();
    }

    public char charAt(int i){
        return str.charAt(i);
    }
}

您的代码在许多层次上都是错误的。 我建议您首先了解Java的基础知识。 在考虑编写自己的代码之前。

您的代码中的问题:

  1. Java String类是final ,这意味着其他任何类都不能从String继承(因此Ide无法扩展String)
  2. 您将您的方法称为“新建”。 那是一个方法的超级坏名字。 调用它为例:“ generateIdeFromName()”。
  3. 编译器会告诉您什么地方不对:字符串对象不是Ide对象。 因此,您不能将String分配给Ide(这就是应该返回Ide对象的方法会返回String的情况)

长话短说:您正在尝试建造摩天大楼,但您已经缺乏在地面上挖掘整块土地的技能。 这并不是要侮辱您,而是事实:您必须首先学习很多东西。 不要指望我们向您解释所有您想出一个合理的程序所需的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM