Tag: generics

如何编写generics方法来查找最大元素并调用该方法?

当我试图通过generics教程Q&A解决练习时,我的答案略有不同 我的答案 public static <T extends Comparable> T max(List list, int begin, int end) //Option1 public static <T extends Comparable> T max(List list, int begin, int end) //Option2 从下面引用的答案 所以我的问题是 选项1:如果T extends Object & Comparable它会有什么不同T extends Object & Comparable T extends Object & Comparable被替换为T extends Comparable T extends Comparable 。 是不是extends Object隐含? 选项2:如果Comparable它会有什么不同Comparable Comparable被Comparable取代? 如果是这样? […]

如何在Java中获取地图的值类型?

可能重复: 获取java.util.List的generics类型 我有一个Map,我想从该Map的实例中获取T的类型。 我怎样才能做到这一点? 例如,我想做类似的事情: Map map = new HashMap(); … String vtype = map.getValueType().getClass().getName(); //I want to get Double here 当然,API中没有这样的’getValueType()’函数。

Java:如何覆盖这种通用方法?

public List save(Iterable entities) { //… } 如果我使用以下方法来覆盖 @Override public List save(Iterable structures) { List result = new ArrayList(); //… return result; } 我收到以下错误: method does not override or implement a method from a supertype name clash: save(Iterable) in MyTypeRepositoryImpl and save(Iterable) in SimpleJpaRepository have the same erasure, yet neither overrides the other where S,T […]

Java中的嵌套类型参数

这是一个我编写的实例代码的简化示例,所以如果它有点人为,我会道歉。 我想要做的是从单个嵌套类型参数中有效地获取两个类型参数。 我很确定这是不可能的,但我想我会试一试。 //Not legal java code public class Foo<C extends Collection> { //where T is another type parameter private C coll; public Foo(C coll) { this.coll = coll; } public void add(T elem){ this.coll.add(elem); } //UPDATED TO ADD GETTER /** * I may need to retrieve the collection again, or pass it * on […]

带generics的LambdaConversionException:JVM错误?

我有一些带有方法引用的代码,它可以很好地编译并在运行时失败。 例外是这样的: Caused by: java.lang.invoke.LambdaConversionException: Invalid receiver type class redacted.BasicEntity; not a subtype of implementation type interface redacted.HasImagesEntity at java.lang.invoke.AbstractValidatingLambdaMetafactory.validateMetafactoryArgs(AbstractValidatingLambdaMetafactory.java:233) at java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:303) at java.lang.invoke.CallSite.makeSite(CallSite.java:289) 这个class是这样的: class ImageController { void doTheThing(E entity) { Set filenames = entity.getImages().keySet().stream() .map(entity::filename) .collect(Collectors.toSet()); } } 尝试解析entity :: filename会抛出exception。 filename()在HasImagesEntity上声明。 接近我可以说,我得到了exception,因为E的擦除是BasicEntity而JVM没有(不能?)考虑E上的其他边界。 当我将方法引用重写为一个普通的lambda时,一切都很好。 对我来说,一个构造按预期工作并且它的语义等价物爆炸似乎真的很可疑。 这可能是在规范中吗? 我正在努力寻找一种不会在编译器或运行时出现问题的方法,并且没有提出任何建议。

战略设计模式,generics和类型安全

我想创建以下策略模式与Factory结合,但我希望它是类型安全的。 到目前为止我做了以下事情: public interface Parser { public Collection parse(ResultSet resultSet); } public class AParser implements Parser { @Override public Collection parse(ResultSet resultSet) { //perform parsing, get collection Collection cl = performParsing(resultSet); //local private method return cl; } } public class ParserFactory { public enum ParserType { APARSER } public static Parser createParser(ParserType parserType) { Parser […]

是否可以使用generics返回类型定义接口方法,并且具体实现定义返回类型?

我想创建一个接口: public interface OperandValue { T getValue(); } 我希望有一个这样的具体实现: public class NumberOperandValue implements OperandValue { @Override public Integer getValue() { // some integer value that is set elsewhere return 1; } } Eclipse强调给我一个警告说: 类型参数Integer隐藏了Integer类型 如果这可以以某种方式工作,我感谢任何建议。 我意识到我可以在接口级别而不是方法级别定义generics类型,但是如果可能的话,我想尝试使其工作。

Javagenerics和inheritance递归

我遇到了以下使用generics和inheritance的Java代码。 我真的不明白以下代码片段的作用: class A<B extends A> { … } 这段代码有什么作用? (我从MapDB中的DBMaker那里得到了这个)

可以编写通用的XmlAdapter

我知道,我可以使用Raw类型来编写XMLAdapter,但我可以使用generics类型。 我试过阅读API( 链接 ),但甚至没有注意到这一点的线索。 例如地图: 我想用,比如: @XmlJavaTypeAdapter(GenericMapAdapter.class)// private final HashMap depWageSum = // new HashMap(); 要得到 289.001 499.817 41.824 … 类本身可能看起来像以下几行: @SuppressWarnings(“serial”) public class GenericMapAdapter extends XmlAdapter<GenericMapAdapter.MapType, Map> { public static class MapType { @XmlValue protected final List<MapTypeEntry> entry = new ArrayList<MapTypeEntry>(); public static class MapTypeEntry { @XmlAttribute protected K key; @XmlValue protected V value; […]

为什么列表的通用演员到List 在Sun JDK 6上成功但在Oracle JDK 7上无法编译?

以下代码 class GenericCompilationFailureDemo { List newList() { return new ArrayList(); }; void useList() { List list = (List) newList(); } List<? extends Set> newListOfSpecificSets() { return new ArrayList<Set>(); }; void useListOfSpecificSets() { List<Set> listOfSpecificSets = (List<Set>) newListOfSpecificSets(); } List<? extends Set> newListOfSets() { return new ArrayList<Set>(); }; void useListOfSet() { List<Set> listOfSets = (List<Set>) newListOfSets(); […]