Tag: 类型安全

如何在java中参数化generics单例

我有下一个问题。 我有一个界面: public interface Worker { public void start(Class taskClass); } 和单接口实现此接口: public final class Listener implements Worker { private Listener() {} @Override public void start(Class taskClass) { … } public static Listener getInstance() { return SingletonHolder.INSTANCE; } private static class SingletonHolder { public static final Listener INSTANCE = new Listener(); } } 我的问题是,我可以通过这种方式得到单例实例: Worker […]

如何在Java中设计类型安全的堆栈,防止从空列表中弹出?

这是这两个问题的分支: 1,2 。 我想在Java中实现类型安全的数据结构,以防止无意义的操作。 例如,如果编译器知道我有一个空堆栈的实例,它不应该允许我在空堆栈上调用pop。 作为一个例子,我如何在Java中实现这样的(通用)堆栈?

Java:使用reflection正确检查了类实例化

我正在尝试使用最简单的reflectionforms之一来创建类的实例: package some.common.prefix; public interface My { void configure(…); void process(…); } public class MyExample implements My { … // proper implementation } String myClassName = “MyExample”; // read from an external file in reality Class myClass = (Class) Class.forName(“some.common.prefix.” + myClassName); My my = myClass.newInstance(); 我们从Class.forName获取未知的Class对象会产生一个警告: 类型安全:从Class 到Class 我尝试过使用instanceof check方法: Class loadedClass = Class.forName(“some.common.prefix.” […]

JComboBox是一种原始类型。 应参数化对generics类型JComboBox 的引用

String[] boxOptions = {“1″,”2″,”4″,”8″,”16″,”20″,”40″,”100″,”400”}; JComboBox box = new JComboBox(boxOptions); 我以前在程序中有这些确切的代码行,并没有收到此错误。 我做了一些搜索,我发现的结果有点过头了。 有任何想法吗? 错误是: JComboBox is a raw type. References to generic type JComboBox should be parameterized

让Gson在错误的类型上抛出exception

我在我的项目中使用Gson将JSON-Strings反序列化为Java-Objects。 如果我发出请求,我希望服务器有明确定义的响应。 服务器将返回我期望的明确定义的响应,或者它将返回一个(也定义的)错误对象。 为了清楚起见:假设我有一个像这样的简单对象: class Dummy{ private String foo; private int bar; } 和像这样的错误对象: class ErrorHolder{ private RequestError error; } class RequestError{ private String publicMsg; private String msg; } 如果我得到像服务器响应 {“foo”:”Hello World”, “bar”:3 } 一切都按预期工作。 但如果回应是这样的话 {“error”:{“publicMsg”:”Something bad happened”, msg:”you forgot requesting some parameter”}} 我会得到一个Dummy对象,其中foo为null且bar为0! Gson文档(来自Json)明确指出: 抛出JsonSyntaxException – 如果json不是classOfT类型的对象的有效表示 所以如果我尝试解析第二个响应,我希望得到一个JsonSyntaxException: Dummy dummy = Gson.fromJson(secondResponse, Dummy.class); […]

为什么Java允许类型不安全的arrays分配?

通常,Java可以被视为类型安全的语言。 我知道generics有一些缺陷,但我最近遇到了一个前所未有的问题。 要打破它: Object[] objects = new Integer[10]; objects[0] = “Hello World”; 不会导致预期的编译时错误。 我假设Object数组的声明将不允许指向其他数组。 在generics中,我不允许做出如下奇怪的事情: ArrayList objs = new ArrayList 如果我试图欺骗Java做一些事情 ArrayList objects = new ArrayList 我被允许声明它,但我只能添加null类型的对象。 为什么Java不能阻止声明这样的数据呢?

覆盖“等于”方法:如何确定参数的类型?

我正在尝试为参数化类重写equals方法。 @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof Tuple)) return false; Tuple other = (Tuple) obj; //unchecked cast if (!a0.equals(other.a0) && !a0.equals(other.a1)) { return false; } if (!a1.equals(other.a1) && !a1.equals(other.a0)) { return false; } return true; } 如何确保other对象的与此相同?

Java中的generics和排序

假设您使用Java编写静态函数来对数组进行排序,就像Arrays.sort() 。 Arrays.sort()的问题是它接收一个Object数组,如果它的元素没有实现Comparable ,则抛出ClassCastException 。 所以你希望你的函数作为参数接收一个Comparable子类型的数组。 这样的东西可以工作: static void sort(T[] array); 该签名的问题在于您仍然可以传递一个带有整数和字符串的可比较数组,这会导致RuntimeException 。 那么,如何创建一个只接收一个数组的函数,该数组的元素实现Comparable并且具有相同的类型(例如Integer,String等?)

GSON和InstanceCreator问题

我有以下POJO: public interface Shape { public double calcArea(); public double calcPerimeter(); } public class Rectangle implement Shape { // Various properties of a rectangle } public class Circle implements Shape { // Various properties of a circle } public class ShapeHolder { private List shapes; // other stuff } 我没有问题让GSON将ShapeHolder的一个实例序列化为JSON。 但是当我尝试将该JSON的String反序列化为ShapeHolder实例时,我收到错误: String shapeHolderAsStr = getString(); […]

Java中嵌套集合/结构的类型安全展平

我想在Java中压缩任意深度嵌套的某些类型T元素的集合/结构 ,最好用 只有实时视图而不是复制的集合; 不仅处理集合,而且还有Iterator,任意维度的T数组,Iterable,以及任意混合和嵌套的所有这些结构; 静态类型安全。 有没有一个可以处理这个的java库? 番石榴似乎只处理一个嵌套级别,即Collection<Collection> –flatten – > Collection 。 lambdaj看起来很有希望:我可以以某种方式结合on() , asIterator()和flattenIterator()来实现这一目标吗? 以静态类型安全的方式?