gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:48:50 24 4
gpt4 key购买 nike

我可以按照标题中的要求制作这个新类(class)吗,这是我的尝试。

import javax.lang.model.*;

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

但是它无法编译,因为我无法将 String ide 转换为 Ide 类型,我该怎么办?我需要 Ide 类型,提前致谢。

最佳答案

这段代码有几个问题:

  • 字符串最终。这意味着,没有类可以继承 String
  • New 应该是static,否则该方法将没有任何意义。需要一个类的实例来创建其他实例就像先有鸡还是先有蛋的问题,只是您两者都没有。
  • 调用方法New是一种非常糟糕的风格。 new 是java中的一个关键字,你会引发编码错误,使你的代码可读性较差......。并且方法名称不应该是大写的。
  • 即使可以使类从 String 扩展,String 参数也不会自动成为 Ide 实例。因此 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 - 如何创建一个名为“标识符”的新数据类型,使其每个实例都应该是有效的标识符名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36073904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com