相关疑难解决方法(0)

从泛型类返回数组

ClassCastException运行这个时遇到错误,因为在运行代码时d隐式转换为double.但是,如果我将引用更改为d in,Object[]则它不能成为set函数的参数.如果我将set函数更改为接受a Object[]然后一切正常,但是如果有人在非类型的对象上调用set,那么该类将在运行时失败N.

我需要一个可以get()使用旧数组(或其克隆)并且可以将set()数据传输到新数组的解决方案.

public class Foo<N> {

    public static void main(String[] args) {
        Foo<Double> foo = new Foo<Double>();
        Double[] d = foo.get();

        // do stuff to d ...

        foo.set(d);
    }

    N[] data;

    public Foo() {
        data = (N[]) new Object[2];
    }

    public N[] get() {
        return (N[]) data;
    }

    public void set(N[] data) {
        this.data = data;
    }

}
Run Code Online (Sandbox Code Playgroud)

java

7
推荐指数
1
解决办法
141
查看次数

泛型问题和数组

对不起,我想不出一个更简洁的标题.

我的问题是为什么以下代码可以工作:

public abstract class TObjectPool<T> {
protected Object[] availableObjects;

TObjectPool(int size){
    availableObjects = new Object[size];
}

protected class RenderElementPool extends TObjectPool<RenderElement>{
    @Override
    public void fill() {
        for (int i = 0; i < capacity; i++) {
            availableObjects[i] = new RenderElement();   
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

什么时候不能使Object数组成为泛型:

public abstract class TObjectPool<T> {
protected T[] availableObjects;

TObjectPool(int size){
    availableObjects = (T[]) new Object[size];
}
Run Code Online (Sandbox Code Playgroud)

当availableObjects [i] = new RenderElement(); 在后一个例子中执行line我得到一个ClassCastException.我理解为什么它在第一个例子中起作用但不是为什么它不在第二个例子中.availableObjects应该是RenderElement的数组,我试图给它一个RenderElement.我错过了什么关键信息?

谢谢您的帮助.

更新中...

非常感谢您的回复.我以为我理解但是我已经设法再次迷惑自己:

如果我添加功能:

public void add(int index, T object){
    availableObjects[index] = object; …
Run Code Online (Sandbox Code Playgroud)

java

6
推荐指数
1
解决办法
188
查看次数

Java泛型错误

可能重复:
Java如何:通用阵列创建
错误:通用阵列创建

我收到此错误:

Cannot create a generic array of T
Run Code Online (Sandbox Code Playgroud)

这是我的代码(第6行的错误):

1    public class HashTable<T> {
2    
3        private T[] array;
4    
5        HashTable(int initSize) {
6            this.array = new T[initSize];
7        }
8    }
Run Code Online (Sandbox Code Playgroud)

我想知道为什么会出现这个错误,并且是修复它的最佳解决方案.谢谢.

更新:

我调整了我的代码,以便数组代替链接列表,但我收到一个新的错误.

这是我的错误:

Cannot create a generic array of LinkedList<T>
Run Code Online (Sandbox Code Playgroud)

这是我的代码(第六行的错误):

1    public class HashTable<T> {
2    
3        private LinkedList<T>[] array;
4    
5        HashTable(int initSize) {
6            this.array = new LinkedList<T>[initSize];
7        }
8    }
Run Code Online (Sandbox Code Playgroud)

这个错误是出于同样的原因吗?我只是假设我可以创建通用链表并将它们存储在数组中.

java generics

6
推荐指数
2
解决办法
1302
查看次数

数组返回可用于赋值,但不能用于循环

当我遇到一个小小的谜时,我正在回答一个不同的问题.类定义(稍微修改自原始提问者)在这里:

public class Playground<T>{
    private int pos;
    private final int size;
    private T[] arrayOfItems;
    public Playground(int size){
        this.size = size;
        pos = 0;
        arrayOfItems = (T[]) new Object[size];
    }

    public void addItem(T item) {
        arrayOfItems[pos] = item;
        pos++;
    }

    public void displayItems() {
        for(int i = 0;i<pos;i++){
            System.out.println(arrayOfItems[i]);
        }
    }

    public T[] returnItems() { 
        return (T[]) arrayOfItems;
    }
}
Run Code Online (Sandbox Code Playgroud)

主要是,然后我们创建一个新的Playground,Playground<String> animals = new Playground<String>(5);并在其中放入一些动物字符串.(狗,猫等).

神秘之处在于:

Object[] s = animals.returnItems();
for(int i=0; i < s.length; i++) { …
Run Code Online (Sandbox Code Playgroud)

java arrays generics class

6
推荐指数
1
解决办法
111
查看次数

不能转换为 [Ljava.lang.Comparable

所以我需要做动态有序列表。

    public class DynArrayListOrd<T extends Comparable<T>>  {
        private T[] tab ;

        public DynArrayListOrd()
        {
          tab = (T[])new Object[startSize];
        }
        ....

        main {
          DynArrayListOrd tab = new DynArrayListOrd();

          tab.add("John");
          tab.add("Steve");
        }
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,出现错误:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;
    at structures.DynArrayListOrd.<init>(DynArrayListOrd.java:14)
    at structures.DynamicArrayAppp.main(DynArrayListOrd.java:119)
Run Code Online (Sandbox Code Playgroud)

java compareto

6
推荐指数
1
解决办法
9481
查看次数

如何将Address对象数组传递给其他Acitvity

我正在尝试通过Intent对象将Address对象数组传递给另一个Activity.

当Address类实现Parcelable接口时,我尝试执行以下操作.我从Geocoder对象获得了一个List Address对象,我将其转换为Address对象数组.然后我将此数组放入Intent并调用该活动.

final Address[] addresses = addresseList.toArray(new Address[addresseList.size()]);

final Intent intent = new Intent(this, SelectAddress.class);
intent.putExtra(SelectAddress.INTENT_EXTRA_ADDRESSES, startAddresses);

startActivityForResult(intent, REQUEST_CODE_ACTIVITY_SELECT_ADDRESSES);
Run Code Online (Sandbox Code Playgroud)

在其他活动中,我尝试使用以下代码从Intent中检索Address [].但是最后一行的调用以ClassCastException结束Landroid.os.Parcelable.

Bundle bundle = getIntent().getExtras();            
Address[] addresses = (Address[]) bundle.getParcelableArray(INTENT_EXTRA_ADDRESSES);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我如何检索地址[].

android parcelable android-intent android-activity

5
推荐指数
2
解决办法
5182
查看次数

我怎么能初始化通用数组

我已经给了一个骨架类"OrderSet",它实现了一个类"Set",其中一个变量T []项是通用的,我想把它初始化为一个包含5个元素的数组,但在做了一些阅读之后,我得知您无法初始化通用数组,如果是这样的话我怎么能初始化数组呢?

这是班级

public class OrderSet<T extends Comparable> implements Set<T> {

    private T[] items;
    private int theSize;

    public OrderSet()
    {
        items = (T[]) new Set[5];
    }

    @Override
    public void add(T s)
    {

    }

    @Override
    public void show()
    {

    }

}
Run Code Online (Sandbox Code Playgroud)

java arrays generics

5
推荐指数
1
解决办法
3万
查看次数

使用gson反序列化嵌套的泛型类

使用Gson,我试图反序列化一个嵌套的泛型类.类结构如下所示:

包装器对象,简化,但通常包含其他属性,例如statusMessage,与data服务器的-field 一起返回:

public class Response<T> {

   private List<T> data = null;

   public List<T> getData() { return this.data; }   

}
Run Code Online (Sandbox Code Playgroud)

简单类,data上面的字段的预期输出(尽管作为数组):

public class Language {
   public String alias;
   public String label;
}
Run Code Online (Sandbox Code Playgroud)

用法:

Type type = new TypeToken<Response<Language>>() {}.getType();
Response<Language> response = new Gson().fromJson(json, type);
List<Language> languages = response.getData();
Language l = languages.get(0);
System.out.println(l.alias); // Error occurs here
Run Code Online (Sandbox Code Playgroud)

json-variable是这样的.

但是,在执行此操作时,我收到以下异常(在第3行,最后一个代码示例):

ClassCastException:com.google.gson.internal.StringMap无法强制转换为book.Language

仅在将数据存储getData()到变量中(或作为一个变量使用时)才会发生异常.

任何帮助将受到高度赞赏.

java oop generics gson deserialization

5
推荐指数
1
解决办法
1717
查看次数

如何将hashmap转换为条目数组

我有一张地图

private HashMap<Character, Integer> map;

我想将它转换为数组但是当我这样做/我得到这个:

Entry<Character, Integer> t = map.entrySet().toArray();    
**Type mismatch: cannot convert from Object[] to Map.Entry<Character,Integer>**
Run Code Online (Sandbox Code Playgroud)
Entry<Character, Integer>[] t = null;
map.entrySet().toArray(t); 
**Exception in thread "main" java.lang.NullPointerException**
Run Code Online (Sandbox Code Playgroud)
Entry<Character, Integer>[] t = new Entry<Character, Integer>[1];
map.entrySet().toArray(t); 
   **Cannot create a generic array of Map.Entry<Character,Integer>**
Run Code Online (Sandbox Code Playgroud)
Entry<Character, Integer>[] t = null;
t = map.entrySet().toArray(t); 
**Exception in thread "main" java.lang.NullPointerException**
Run Code Online (Sandbox Code Playgroud)

那么如何转换HashMapArray在其他科目中找不到任何答案.

java arrays collections map toarray

5
推荐指数
1
解决办法
9642
查看次数

new ClassName[0] 的作用是什么?(Java 8)

这个用方括号将数字括起来的语法有什么作用?

new Integer[0];
Run Code Online (Sandbox Code Playgroud)

我在我维护的代码库中找到了它,但找不到任何相关文档。它的使用方式如下:

Set<Form> forms = getForms();
List<Form> formsList = Arrays.asList(forms.toArray(new Form[0]))
Run Code Online (Sandbox Code Playgroud)

java

5
推荐指数
1
解决办法
860
查看次数