Java 具有泛型的多个toString()方法

Java 具有泛型的多个toString()方法,java,generics,tostring,Java,Generics,Tostring,我有一个对象,它将存储在两个不同的数据结构中 我使用泛型,每个结构都必须以不同的方式打印出对象。有没有办法让多个toString()方法相应地调用 我不能创建两个返回字符串的不同方法,因为在泛型类型中没有定义自定义方法,所以除非强制转换它,否则不能调用它们,这打破了泛型背后的观点 我是否应该为每个数据结构创建两个具有不同toString()方法的不同对象?还是有其他选择 谢谢我认为您需要使用不同对象的toString(),但是您应该仍然能够使用适当的泛型 我想您的泛型类至少有一个泛型类型的实例。

我有一个对象,它将存储在两个不同的数据结构中

我使用泛型,每个结构都必须以不同的方式打印出对象。有没有办法让多个
toString()
方法相应地调用

我不能创建两个返回字符串的不同方法,因为在泛型类型中没有定义自定义方法,所以除非强制转换它,否则不能调用它们,这打破了泛型背后的观点

我是否应该为每个数据结构创建两个具有不同
toString()
方法的不同对象?还是有其他选择


谢谢

我认为您需要使用不同对象的
toString()
,但是您应该仍然能够使用适当的泛型

我想您的泛型类至少有一个泛型类型的实例。如果是这种情况,请重写泛型类
toString()
以委托给泛型类型对象实例

如果泛型类只有一个实例,则可以执行以下操作:

class Holder<T> {
    private T instance;

    public Holder(T _instance) {
        instance = _instance;
    }

    public String toString() {
        return instance.toString();
    }
}

如果需要在两个端口上调用它,则需要将其添加到接口中。您完全可能不想使用toString(),因为toString()应该是人类可读的表示形式

class Nay1 {

    String someCrazyMethod() { return "ugh"; }
}

class Nay2 {

    String someRandomMethod() { return "ook"; }
}
这太糟糕了。你不会想要一个否定的答案,或者一个否定的答案。但是你需要穿制服

接口{

String nayRepresentation();
}

还有你的新课程:

class Nay1 implements NayInterface  {

    String someCrazyMethod() { return "ugh"; }

    public String nayRepresentation() { return someCrazyMethod(); }
}

class Nay2 implements NayInterface {

    String someRandomMethod() { return "ook"; }

    public String nayRepresentation() { return someRandomMethod(); }
}
现在不管怎样,您都可以调用
myNayInterface.naymresentation()
以获取与适当类匹配的字符串表示形式,而无需执行任何强制转换

class ActuallyDoesSomething<T extends NayInterface> {

    String foo;

    public ActuallyDoesSomething(T t) {
        this.foo = t.nayRepresentation();
    }

    public String foo() { return foo; }

}
类实际分解方法{
串福;
公众实际饮酒量(T){
this.foo=t.nay表示法();
}
公共字符串foo(){return foo;}
}

显然,如果您想使用toString()而不是nayRepresentation,您可以这样做。但这将允许您不必使用toString,而是保留它以用于调试目的。

您能告诉我您希望如何调用multiple-toString()方法来获得不同的字符串吗?您如何知道对象存储在任何数据结构中?是的-我想我需要两个不同的类。否?我的对象只有一个泛型类型实例。但是,
instance.toString()将如何处理根据调用者的不同而有所不同?我在哪里设置如何打印它?好的,您需要在泛型类型上定义
toString()
方法。当这项工作就绪时,它将调用给定类型的
toString()
方法,而这不需要在泛型类中定义多个
toString()
。因此,您的意思是只需创建两个不同的对象,它们是完全相同的副本,只需更改每个对象中的toString()?这是一种方法。这取决于它的用途;我不建议将toString()用于对象的可读表示之外的其他内容。是的,我希望它用于此目的。我需要一个人类可读的表示。那么是的,toString是完美的。
class ActuallyDoesSomething<T extends NayInterface> {

    String foo;

    public ActuallyDoesSomething(T t) {
        this.foo = t.nayRepresentation();
    }

    public String foo() { return foo; }

}