【发布时间】:2019-12-18 01:17:27
【问题描述】:
我有以下代码,但不能按预期工作。 当我使用 Grumbo 作为类型调用 Chumbles 构造函数时,它每次调用 Schlami 接口的静态方法而不是 Grumbo 的方法。 我在这里想念什么?什么解决方法,我很确定我需要一个,我应该实施吗?
提前致谢!
ps:我已经为我的命名约定感到抱歉了:D
编辑:我的意图: 我有几个类都需要转换为 JSON 并从 JSON 转换回一个类。 除此之外,我为它们中的每一个都有一个包装类,它包含一个类类型的数组列表,并且可以将该列表来回转换为 JSON。
所以我尝试构建一个通用类,我可以重用它来缩小代码。我的尝试是实现一个接口来保证这两种方法的存在并在该泛型类中调用它们。但这似乎不起作用。
知道对象转换不起作用。无论如何都不应调用该函数
public class main {
public static void main(String[] args){
Chumbles<Grumbo> schleem = new Chumbles<>("test");
System.out.println("pause");
}
}
public class Chumbles<T extends Schlami> {
public Chumbles(String s){
T fleeb = T.fromJSON(s);
System.out.println(fleeb.toJSON());
}
}
public class Grumbo implements Schlami {
String s;
public Grumbo(String s) {
this.s = s;
}
@Override
public String toJSON() {
return "GrumboJSON";
}
public static Grumbo fromJSON(String s) {
return new Grumbo("Grumbo Success ");
}
}
public interface Schlami {
String toJSON();
static <T> T fromJSON(String json){
return (T) new Object();
}
}
EDIT2:所以我现在使用通用工厂类和 fromJSON 的非静态调用的组合。使用 new Grumbo().fromJSON(json) 感觉很恶心,但我会一直使用它,直到找到更好的解决方法。感谢大家的帮助。
【问题讨论】:
-
Chumbles<T extends Schlami>?这没有意义 -
如果接口没有实例方法,为什么还要实现或扩展 Schlami?
-
你的问题真的是伪装的XY Problem吗?您可能想告诉我们您正在尝试解决的总体问题,而不是您当前尝试解决的方式。
-
(T) new Object():保证会崩溃。静态接口方法不应该这样使用。 -
对您的问题的简短回答:Java 没有办法做到这一点;改为创建显式工厂类。
标签: java generics interface static-methods