【问题标题】:How to create new string type in java [closed]如何在java中创建新的字符串类型[关闭]
【发布时间】:2014-03-10 10:01:30
【问题描述】:

我需要创建新类 - myType。我想将字符串项添加到List<Object>as myType。 示例(它不正确,但它可以解释我需要什么):

ArrayList<Object> attemptList = new ArrayList<Object>();
            attemptList.add(Sting.toMyType("Loading time"));

我有:

class myType {
        private String type;

        public myType() {
            type = new String();
        }
        public myType toMyType(String string) {
            type.**????**
            return(this);
        }
    }

据我了解,我需要在 toMyType 中创建 toString 类比?

【问题讨论】:

  • 你为什么要做这样的事情?
  • 呃...为什么不ArrayList&lt;String&gt;
  • 说实话,真的不清楚你要做什么。
  • 这个 ArrayList 将被 Xstreamed 到 XML,我想添加别名来重命名每个 myType 类

标签: java arrays class types


【解决方案1】:

您不能假装您的类字符串类型的实例是String,反之亦然。

Stringfinal 类,所以你不能创建子类。

而且,为了记录,有充分的理由说明如果你可以做这些事情中的任何一个,那将是糟糕 ...

可能,您可以做的最接近的事情是创建一个自定义类型 CharSequence ... 并依赖于许多标准 API 接受 CharSequence 而不是 @ 的事实987654328@。或者,也许您应该将您的自定义类型设置为字符串持有者类型......就像@TimB 用他的回答说明的那样。


根据您的上一条评论和您之前的问题,我认为您实际需要做的是为您的ArrayList&lt;String&gt; 实现一个 Xstream Converter。或者,也许您可​​以使用 Xstream Annotations 来实现。当然,修改应用程序的类型以使 XML 看起来不错似乎是错误的方法。

【讨论】:

  • 我同意@JonSkeet。从您的示例中不清楚您希望实现什么。我只是做了一些假设并涵盖了一些明显的可能性。
【解决方案2】:

你的问题不是很清楚,但是:

ArrayList<MyType> attemptList = new ArrayList<MyType>();
            attemptList.add(new MyType("Loading time"));


class MyType {
        private String type;

        public myType(String type) {
            this.type = type;
        }
        public String getType() {
            return type;
        }
    }

现在您可以构造一个包含StringMyType,可以查询String,还可以将MyTypes 添加到List

对于大多数 XML 转换库中的流式传输到 XML,您可以使用注释或配置来告诉 XML 库如何映射每个字段。只需在 Java 中使用一个简单的字符串,然后适当地配置映射。不要仅仅为了映射而牺牲你的 Java 代码。

【讨论】:

    【解决方案3】:

    您可以创建自己的包含String 对象的类,并覆盖toString() 方法,以便在打印出您的对象时获得包含的字符串,例如this。

    private class MyClass() {
    
        public String innerString;
    
        public MyClass(String s) {
            innerString = s;
        }
    
        @Override
        public String toString() {
            return innerString.toString();
        }
    }
    

    但是,除了有效地重命名类之外,这几乎没有意义。此外,如果您想对字符串使用字符串操作,则必须在 innerString 字段上调用该方法。例如:

    MyClass a = new MyClass("test string");
    a.innerString.substring(0,5);
    

    所有其他 String 方法都可以被覆盖,类似于 toString(),但如果这是您需要的,我建议您重新考虑您的方法,因为重新实现现有类会提示设计问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-19
      • 2012-07-11
      • 1970-01-01
      • 2021-08-13
      • 2021-11-04
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多