Tag: generics

括号内的Javagenerics方法参数类型与外部括号

之间有什么区别: static void findMax(LinkedList list){…} 和: static void findMax(LinkedList list){…} 既然两者都有效,我想知道两者之间是否有任何重大差异,建议采用哪种方法。

避免在具有多种值类型的地图中取消选中分配?

我在Java 7中遇到警告时遇到问题: Unchecked assignment: ‘java.lang.Class’ to ‘java.lang.Class’ 我在Class type = typeMap.get(key);行上得到它Class type = typeMap.get(key); 在下面的get函数中。 基本上我在这里想要做的是我想存储一堆未知类型的键/值对(但是所有都是Object的后代,除了null),但不会丢失类型。 所以我使用generics创建了一个包含以下内容的类。 它有两个映射(一个用于存储数据,另一个用于存储类类型: private Map dataMap = new HashMap(); private Map typeMap = new HashMap(); public void put(String key, T instance){ dataMap.put(key, instance); if (instance == null){ typeMap.put(key,null); } else { typeMap.put(key, instance.getClass()); } } public T get(String key){ Class […]

可调用和generics的集合

我需要在并发线程中启动一堆任务并检索其结果。 这是我的代码: List<Callable> tasks = new ArrayList(); // Adding some tasks whith return different types of results: // Callable, Callable, Callable, and so on… List<Future> results = executor.invokeAll( tasks ); 但IDE显示下一个错误: no suitable method found for invokeAll(List<Callable>) method ExecutorService.invokeAll(Collection<? extends Callable>) is not applicable (cannot infer type-variable(s) T#1 (argument mismatch; List<Callable> cannot be converted to […]

从父类返回子类

我有一个构建器类,它从大多数方法返回以允许菊花链。 为了使这个工作与子类,我希望父方法返回子的实例,以便子方法可用于链到最后。 public class BaseBuilder<T extends BaseBuilder> { public T buildSomething() { doSomeWork(); /* OPTION #1: */ return this; // “Type mismatch: cannot convert from BaseBuilder to T” /* OPTION #2: */ return T.this; // “Type mismatch: cannot convert from BaseBuilder to T” /* OPTION #3: */ return (T) this; // “Type safety: Unchecked cast […]

为什么此代码因sourceCompatibility = 1.8而失败

使用sourceCompatibility = 1.7或1.6编译时,以下代码有效,但切换到1.8后失败: public class Java8Wat { interface Parcelable { } static class Bundle implements Parcelable { public void put(Parcelable parcelable) { } public void put(Serializable serializable) { } public T getParcelable() { return null; } } static { Bundle inBundle = new Bundle(); Bundle outBundle = new Bundle(); outBundle.put(inBundle.getParcelable()); } } 编译输出: Java8Wat.java:23: error: […]

使用匿名类创建参数化类型对象

这可能是一个愚蠢的问题,但我刚刚看到一个问题,询问如何为generics类型创建一个Type变量 。 共识似乎是你应该有一个返回该类型的虚方法,然后使用reflection来获取它(在这种情况下,他想要Map )。 像这样的东西: public Map dummy() { throw new Error(); } Type mapStringString = Class.forName(“ThisClass”).getMethod(“dummy”).getGenericReturnType(); 我的问题是,没有多少使用reflection,你不能只做以下事情: Type mapStringString = new ParameterizedType() { public Type getRawType() { return Map.class; } public Type getOwnerType() { return null; } public Type[] getActualTypeArguments() { return new Type[] { String.class, String.class }; } }; 这会有用吗? 如果没有,为什么不呢? 如果它有什么危险/问题(除了能够返回一些类似Integer类型,这显然是不可能的)。

Java Generics:compareTo和“capture#1-of?”

以下给出了一条错误消息: public static List<Comparable> merge(Set<List<Comparable>> lists) { List<Comparable> result = new LinkedList<Comparable>(); HashBiMap<List<Comparable>, Integer> location = HashBiMap.create(); int totalSize; for (List<Comparable> l : lists) { location.put(l, 0); totalSize += l.size(); } boolean first; List<Comparable> lowest; //the list with the lowest item to add int index; while (result.size() < totalSize) { first = true; for (List<Comparable> […]

在generics中将@SuppressWarnings(“unchecked”)添加到单行生成eclipse编译器错误

我偶然发现了一个我不理解的奇怪行为。 我必须将一个String转换为generics,它会产生一个警告。 Type safety : Unchecked cast from String to T 如果我在方法声明上面添加@SuppressWarnings(“unchecked”)它可以正常工作。 如果我将它添加到赋值之上,它会在eclipse中产生编译错误。 这很好用。 @SuppressWarnings(“unchecked”) public T search(final String query){ T returnValue = null; … if(returnValue instanceof String){ returnValue = (T) collection.getString(attrName); } 这不行。 public T search(final String query){ T returnValue = null; … if(returnValue instanceof String){ @SuppressWarnings(“unchecked”) // Compiler error: “returnValue cannot be resolved […]

使用reflection的通用构建器模式类

使用generics实现构建器模式会很棒。 从理论上讲,可以使用reflection来实现以下目标: MyClass myClass = GenericBuilder.aObject() .withThisProperty(“foo”) .withThatProperty(4) .build(); 我已经做了以下代码: public class CursistBuilder { private Cursist cursist = null; private CursistBuilder() { cursist = new Cursist(“username not set”, “email not set”); } public static CursistBuilder aCursist() { return new CursistBuilder(); } public CursistBuilder withNaam(String name) { cursist.setGebruikersnaam(name); return this; } public CursistBuilder withEmail(String email) { […]

我如何在Android中实现片段的通用ArrayList?

所以我试图实现一个方法,使用我的所有Fragment类来创建一个Array List 在我的MainActivity.java类中Array List ,这是一个带有扩展Fragment类的不同对象的ArrayList 。 我这样做的主要原因是使用android.support.v4.jar支持库ViewPager视图加载片段。 这是我到目前为止所拥有的,但我无法添加extend Fragment到我的ArrayList的不同对象 public List getFragments(){ List ipsumFragments = new ArrayList(); ipsumFragments.add(BaconIpsumFragment.newInstance()); ipsumFragments.add(BuseyIpsumFragment.newInstance()); ipsumFragments.add(LoremIpsumFragment.newInstance()); return ipsumFragments; } 我只是试图使用ViewPager和多个片段来解决问题。如果有人能帮助我,我将非常感激。 这是我的第一个Fragment类,其他是完全相同但命名不同并使用不同的XML布局 public class BaconIpsumFragment extends Fragment{ public static final BaconIpsumFragment newInstance(){ BaconIpsumFragment baconFragment = new BaconIpsumFragment(); Bundle args = new Bundle(); baconFragment.setArguments(args); return baconFragment; } @Override public void onAttach(Activity activity){ // […]