Tag: generics

在转换为generics类型时,Java中的警告

我有一些通用代码,我无法弄清楚如何合法地阻止警告; 我目前正在使用@SuppressWarnings(“未经检查”),因为似乎在没有警告的情况下无法完成转换generics类型。 我怎样才能摆脱注释? 我所拥有的是: public MyObject(SharedContext ctx) { super(ctx); // set protected field ‘context’ … context.set(“Input Fields” ,Collections.synchronizedMap(new TreeMap<String,Pair>(String.CASE_INSENSITIVE_ORDER))); context.set(“Output Fields” ,Collections.synchronizedMap(new TreeMap (String.CASE_INSENSITIVE_ORDER))); context.set(“Event Registry”,new EventRegistry(log) ); } @SuppressWarnings(“unchecked”) protected void startup() { inputFields =(Map<String,Pair>)context.get(“Input Fields” ,null); outputFields =(Map )context.get(“Output Fields” ,null); eventRegistry =(EventRegistry )context.get(“Event Registry”,null); … } 受保护的变量上下文是SharedContext类型。 如果没有注释,编译器会发出警告: …\MyClass.java:94: warning: [unchecked] unchecked […]

在java中使用接口中的实现类型

我想创建一个接口,强制实现它的每个类具有某个function,用于实现的类的类型。 所以说我有类MyClassA,MyClassB,MyClassC等,它们都需要一个自己类型的函数: 在MyClassA中: public class MyClassA implements MyClass { MyClassA function(MyClassA x) { doSomethingImplementedInMyClassA(x); } } 在MyClassB中: public class MyClassB implements MyClass { MyClassB function(MyClassB x) { doSomethingImplementedInMyClassB(x); } } 问题是,如何编写MyClass接口来要求这样的function? public interface MyClass { MyClass function(MyClass x); } 显然不起作用,因为返回类型是MyClass而不是它的实现。 如何在Java中正确地做到这一点?

工厂和仿制药

我有以下课程: public interface IDataSource { public List getData(int numberOfEntries); } public class MyDataSource implements IDataSource { public List getData(int numberOfEntries) { … } } public class MyOtherDataSource implements IDataSource { public List getData(int numberOfEntries) { … } } 我想使用一个工厂,根据数据类型返回正确的实现。 我写了以下但我得到了“未经检查的演员”警告: public static IDataSource getDataSource(Class dataType) { if (dataType.equals(MyData.class)) { return (IDataSource) new MyDataSource(); } else […]

List <List >是Collection <Collection >的实例吗?

我编写了这个方便的通用函数,用于将集合集合转换为单个集合: public static Set makeSet(Collection<Collection> a_collection) { Iterator<Collection> it = a_collection.iterator(); Set result = new HashSet(); while (it.hasNext()) { result.addAll(it.next()); } return result; } 然后我试着打电话给它: List<List> resultLists = … ; Set labelsSet = CollectionsHelper.makeSet(resultLists); 我收到以下错误: makeSet(java.util.Collection<java.util.Collection>) in CollectionsHelper cannot be applied to (java.util.List<java.util.List>) 现在List 是一个 Collection , String 是 T 那么为什么这不起作用,我该如何解决呢?

想要在java中的复杂结构上建议(DAO和服务层链接/耦合)

介绍 我试图在Java中使用接口,抽象类和generics构建一个相当复杂的结构。 由于没有仿制药的经验,只有平均创建优质OOP设计的经验,这开始certificate是一个相当大的挑战。 我有一种感觉,我正在尝试做的事情实际上无法完成,但我可以接近它。 我会尽量简短地解释一下。 我只想告诉我,这个结构将代表我的DAO和服务层来访问数据库。 使这个问题更抽象只会让它变得更加困难。 我的DAO层完全没有问题。 有一个通用的DAO接口,每个实体都有一个DAO接口,它扩展了generics接口并填充了generics类型。 然后是每个DAO实现扩展的抽象类,后者又实现相应的接口。 很可能会混淆读取,所以这里是以产品DAO为例的图表: 现在,对于服务类,我有一个类似的结构。 无论如何,服务类中的大多数方法都映射到DAO方法。 如果您使用“服务”替换上图中的每个“DAO”,您将获得我的服务层的基础。 但根据我的以下想法,有一件事我想做: 实体的每个服务类至少将访问一个DAO对象,即它所针对的实体的DAO。 哪个是…… 问题/问题 如果我可以进行适当的OO设计, 使每个服务类都有一个实例变量用于各自实体的DAO对象,我认为服务层将是完美的。 对我的建议是受欢迎的,以防我的设计看起来不那么好。 我已经像这样实现了它: 类AbstractService public abstract class AbstractService { EntityDAO entityDAO; public AbstractService() { entityDAO = makeEntityDAO(); //compiler/IDE warning: overridable method call in constructor } abstract EntityDAO makeEntityDAO(); } 类ProductServiceImpl public class ProductServiceImpl extends AbstractService { […]

如何在Eclipse中使用“推断通用类型参数…”

每当eclipse中的源代码遗漏了generics时,它就会建议我“推断通用类型参数……” 问题是我不认为“推断通用类型参数…”实际上已经推断出任何东西。 它通常没有提出任何建议。 它适用于哪些场景? 它是如何工作的? 有几种情况可以“推断”某些东西 – 日食仍然空白。

创建无界和有界外卡类型数组之间的区别?

为什么这段代码有效 ArrayList[] arr = new ArrayList[2]; 但以下两个不是? ArrayList[] arr = new ArrayList[2]; ArrayList[] arr = new ArrayList[2]; 最后两行生成编译错误; 错误:通用数组创建。 请澄清差异。 更新 另一方面, ArrayList[] arr = new ArrayList[2]; 编译好但是 ArrayList arr = new ArrayList(); 不。

Javagenerics:这里的编译器问题是什么? (“没有唯一的最大实例”)

我有以下方法: public T fromJson( Reader jsonData, Class clazz ) { return fromJson( jsonData, (Type)clazz ); } public T fromJson( Reader jsonData, Type clazz ) { … } 编译器说的是第一种方法: type parameters of T cannot be determined; no unique maximal instance exists for type variable T with upper bounds T,java.lang.Object return fromJson( jsonData, (Type)clazz ); ^ 问题是什么?

为什么Predicate 不适用于Object?

假设我们有一个声明为Predicate Predicate 。 我天真地期望它适用于层次结构中的任何超类SomeClass ,包括Object 。 但是,此谓词不适用于Object 。 我收到以下错误: Predicate类型中的方法测试(捕获超级SomeClass的#3)不适用于参数(Object) 演示 。 为什么Predicate Predicate不适用于Object的实例? 代码: import java.util.*; import java.lang.*; import java.io.*; import java.net.URL; import java.util.function.Predicate; /* Name of the class has to be “Main” only if the class is public. */ class Ideone { public static void main (String[] args) throws java.lang.Exception { Predicate p […]

为什么java中的“超类型令牌”模式需要匿名类

在Neal Gafter的“超类型令牌”模式( http://gafter.blogspot.com/2006/12/super-type-tokens.html )中,使用匿名对象传递参数化类型: class ReferenceType{} /* anonymous subclass of “ReferenceType” */ ReferenceType<List> referenceType = new ReferenceType<List>(){ }; Type superClass = b.getClass().getGenericSuperclass(); System.out.println(“super type : ” + superClass); Type genericType = ((ParameterizedType)superClass).getActualTypeArguments()[0]; System.out.println(“actual parameterized type : ” + genericType); 然后结果是: super type : com.superluli.test.ReferenceType<java.util.List> actual parameterized type : java.util.List 我的问题是,匿名对象“referenceType”的作用是什么让它起作用? 如果我定义一个“ReferenceType”的显式子类并使用它而不是匿名样式,它就不会如预期的那样。 class ReferenceType{} class ReferenceTypeSub […]