Tag: generics

如何获取通用Enum的类型对象? 例如:EnumSet.noneOf()

我有一个在一些枚举上参数化的generics类型,声明如下: public class FlagsField<T extends Enum> { private EnumSet _flagSet; public FlagsField() { _flagSet = EnumSet.noneOf( /* what goes here? */ ); } … } 我想在构造函数中初始化_flagsField,如上所述,但无法弄清楚我生活中对于noneOf方法的正确参数是什么。 它必须是Class类型。 如果这不是通用的,那么你在这里使用MyFooEnumType.class ,但是T.class无效。 谢谢!

在Java中键入参数

以下两个声明之间有什么区别吗? public<C extends Condition> List search (C condition) public List search (Condition condition) 一个区别是显而易见的:在第一种情况下, C可以用在search体中。 但是假设C不会在search体中使用:还有什么区别吗?

Javagenerics – 在我调用instanceof后避免强制转换(和未经检查的警告)的任何方法?

Android代码 – SharedPreferences类导出用于持久化/检索不同首选项的不同方法: @SuppressWarnings(“unchecked”) public static T retrieve(Context ctx, String key, T defaultValue) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx); if (defaultValue instanceof Boolean) return (T) (Boolean) prefs .getBoolean(key, (Boolean) defaultValue); else if (defaultValue instanceof Float) return (T) (Float) prefs .getFloat(key, (Float) defaultValue); // etc – another 4 cases } 这工作,我可以调用boolean stored = retrieve(ctx, “BOOLEAN_KEY”, true)好吧 – […]

为什么List 在编译和执行时吸收not-type元素?

我有这个演示,我不需要一个具有重绘架构的特定解决方案,但只是理解为什么这样做以及我为避免它而遗漏的任何事情。 我想知道为什么: 编译器允许将不是列表类型的元素插入到列表中 当我们尝试获取元素而不是在推送元素时抛出ClassCastexception import Test.*; //Inner classes import java.util.List; import java.util.ArrayList; public class Test { private List list = new ArrayList(); public Test() {} public static void main(String[] args) { Test a = new Test(); a.addElement(new String()); a.addElement(new Integer(0)); // No complain in comp/run-time, I dont understand why CastException is not thrown here String […]

如何使用generics类型作为返回值和generics类型作为参数?

我尝试用generics创建一个抽象类。 业务逻辑是将文本从一种语言翻译成另一种语言。 每种语言都必须有一个Translator类。 我还需要为每种语言使用LanguageTranslation类,它是translate方法的返回对象,它接受参数T 该T应该是OriginalText的子类(例如EnglishText,ChineseText等)。 这就是我奋斗的地方。 你如何编码这个约束? 我创建了以下超类。 public abstract class Translator { public abstract V translate(T originalText); } 如果我误解了仿制药的概念或者误解了它,请说明。 谢谢。

Java错误:新的通用TreeNode数组

我有TreeNode的generics类: public class TreeNode { public E key; public int num_of_children; public TreeNode [] children; public TreeNode(int num_of_children) { this.num_of_children = num_of_children; children = new TreeNode[num_of_children];// Why not: new TreeNode[num_of_children]? } public TreeNode clone() { TreeNode node = new TreeNode(num_of_children); return node; } } 当我尝试这样做时: children = new TreeNode [num_of_children]; 我收到错误。 但“新的TreeNode [num_of_children]”有效。 我读到了类型擦除,我不明白为什么TreeNode[]不起作用。 这是为什么? […]

将HashMap值添加到TreeSet时出错

这是一些示例代码……我似乎总是得到一个ClassCastException …任何人都指出我做错了什么? package com.query; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.TreeSet; import org.junit.Test; import com.google.common.collect.Sets; public class ClassCastExceptionTest { @Test public void test() { A a1 = new A(1); A a2 = new A(2); A a3 = new A(3); Map<String, A> map = new HashMap<String, A>(); map.put(“A1”, a1); map.put(“A2”, a2); […]

如何使用通配符实例化generics?

让我们使用外卡研究一些通用的情况: 1 这段代码 List list = new ArrayList(); 生成以下错误: required: class or interface without bounds found: ? 2 但是这个 List list = new ArrayList< Set >(); 汇编成功。 3 和这个: List<Set> list = new ArrayList< Set >(); 编译成功也是如此。 4 但是这个: List<Set<Map>> list = new ArrayList< Set<Map> >(); 生成 required: List<Set<Map>> found: ArrayList<Set<Map>> 五 List<Set> list = […]

获取与Map中相应最大值相关联的键(TreeMap / HashMap)

我编写了下面的代码,以找出在JAVA中使用TreeMap具有最大值(Integer)的键(String)。 public static void maxprofitItem(int[] costs, int[] prices, int[] sales,String[] items) { TreeMapmap=new TreeMap(); int[] profits=new int[items.length]; int maxvalue; for(int i=0;i0){ map.put(items[i],profits[i]); } } Set setOfKeys = map.keySet(); Iterator iterator = setOfKeys.iterator(); while (iterator.hasNext()) { String key = (String) iterator.next(); Integer value = (Integer)map.get(key); System.out.println(“Key: “+ key+”, Value: “+ value); } if(!map.isEmpty()){ System.out.println(“The maximum value […]

为什么返回通用化Map的代码在分配给通用Map时会生成编译器警告?

我有一个带有此签名的方法: protected final Map buildOutputMappings( AbstractDataObject ado, MDBase md) 并使用此方法调用(在子类中): Map params = buildOutputMappings(ra, md); 我得到这个编译器警告: Warning:Warning:line (136)[unchecked] unchecked conversion found : java.util.Map required: java.util.Map 将params更改为非通用化Map会删除编译器警告。 为什么这样以及如何避免(抑制除外)? 编辑:这是JDK 1.5,第136行是上面的赋值语句。 这两个类都没有参数化 ,它们只有返回generics类型Map的方法。 方法中返回的对象也是通用的。 编辑:超类确实是通用的,虽然返回值与那些generics无关。 这是该方法的代码,虽然有免责声明,我没有写这个,我知道它是丑陋的: protected final Map buildOutputMappings(AbstractDataObject ado, MDBase md) throws DAOException { try { …. Map params = new HashMap(spc.getNumberInParams()); …. return params; […]