Addition Of Generic Type Parameter Causes Member Type Clash
Apr 22, 2014
Got a problem with generics, which I'm still pretty new at. Here's a program that compiles fine:
import java.util.ArrayList;
import javax.swing.JComponent;
public class Experiments {
public static void main(String[] args) {
ListHolder holder = new ListHolder();
[Code] ....
It's useless, but it compiles. If I change Line 14, however, to add a generic type parameter to the ListHolder class, Line 10 no longer compiles:
import java.util.ArrayList;
import javax.swing.JComponent;
public class Experiments {
public static void main(String[] args) {
ListHolder holder = new ListHolder();
[Code] ....
I get this error:
Uncompilable source code - incompatible types: java.lang.Object cannot be converted to javax.swing.JComponent
at experiments.Experiments.main(Experiments.java:10)
Apparently, the introduction of the type parameter leaves the compiler thinking that aList is of type Object. I can cast it, like this:
JComponent c = ((ArrayList<JComponent>)holder.aList).iterator().next();
That makes the compiler happy, but why is it necessary? How does adding the (unused) type parameter to the ListHolder class end up making the compiler think the aList member of an instance of ListHolder is of type Object?
I am following this article [URL] .... till now I have made some code
This is my Interface
public interface Comparable<T> { public int compareTo(T o); }
And this is my class where I am using Bound Type Parameter on Generic Methods
public class GenericMethodBoundType { public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) { int count = 0; for (T e : anArray)
[Code] .....
What else I need to do both in main method and at what parameterized types I need to pass at the class?
Okay, I am supposed to implement the functionalities of the Set class using a private data member of type ListReferencedBased<E>,how the ListReferenceBased works with what I am trying to accomplish.I am trying to complete Set.java, and I have barely started and much of the code doesn't work. ListReferenceBased was given to me completed.
import java.util.Iterator; pubic class ListReferenceBased<E> implements ListInterface<E>, Iterable<E>{ /** reference to the first element of the list */ private Node<E> head; /** number of items in list */ private int numItems;
It is important to note that the inference algorithm uses only invocation arguments, target types, and possibly an obvious expected return type to infer types. The inference algorithm does not use results from later in the program.
Generic methods are methods that introduce their own type parameters. This is similar to declaring a generic type, but the type parameter's scope is limited to the method where it is declared. Static and non-static generic methods are allowed, as well as generic class constructors.
1. The method is only exclusively to be used for the declared argument parameter? For example given a generic method:public static <String, Integer> boolean method(Pair<K, V> p1) {}I could only invoke the method if Pair argument parameter is <String, Integer>?
I have set up a project in Eclipse 3.1 and am using java 5.0 compiler.
Here's my folder structure in Eclipse
Java Code:
DFSRemoteClientTestClient.java mh_sh_highlight_all('java'); DFS is the project in Eclipse
And this is how it looks my java class
Java Code:
package RemoteClient; import java.util.*; // other imports public class TestClient { public static void main(String [] args) throws ServiceInvocationException { // business logic here .... } } mh_sh_highlight_all('java');
So, basically, my java class is just a simple class with a main function.
Now when I build my project, using Project->Clean...
Then I get this as an error at the very first line where i specify the package
This is the error:
Java Code: The type Class is not generic; it cannot be parameterized with arguments <T> mh_sh_highlight_all('java');
Is this the proper way to add to a generic list? My code works just fine, but I got this feeling that there might be some kind of flaw in it or something. Is this pretty much the basic way to add any type of data to a generic list?
import java.util.LinkedList; public class ListOfGeneric<E> { private LinkedList<E> myList;
public class CollisionManager<T> { private boolean collision = false; private T mainEntity; public <T extends Entities> void handleCollision(T mainEntity, T secondEntity){ this.mainEntity = mainEntity; // This is illegal. } }
Why "this.mainEntity = mainEntity" is incorrect and also show me the correct way to achieve this?
The error I am getting is "Type mismatch: cannot convert T to T"
public static void doSomething(List<? extends GenericClass> input) { // op }
^
This compiles and works, ensuring I can only pass in a List of a type extending GenericClass.But now I want it to accept an Array instead of List. This is where I'm stuck:
public static void doSomething(<? extends GenericClass>[] input) { // op }
^
A wrong guess at the syntax which does not compile. One solution is to convert Array into ArrayList before calling the 1st method above, but I'd rather bypass this if possible.
I have the following code in which I am looping through the rows of one array (composed of Strings) and copying it to another array. I am using .clone() to achieve this and it seems work as it changes the memory location of the rows themselves. I did notice that the String objects are still pointing to the same location in memory in both arrays but I won't worry about that for now, at the moment I just want to understand why the array I am cloning is not successfully assigning to the other array.
This is the incorrect line: ar[r] = maze[r].clone();
If you have final int i = 1; short s = 1; switch(s) { case i: System.out.println(i); }
it runs fine. Note that the switch expression is of type short (2 bytes) and the case constant is of type int (4 bytes).My question is: Is the type irrelevant as long as the value is within the boundaries of the type of the switch expression?I have the feeling that this is true since:
byte b = 127; final int i = 127; switch(b) { case i: System.out.println(i); }
This runs fine again, but if I change the literal assigned to i to 128, which is out of range for type byte, then the compiler complains.Is it true that in the first example the short variable and in the second example the byte variable (the switch expressions) are first implicitly converted to an int and then compared with the case constants?
I'm trying to parse and compare the content of a zip file. However I'm stuck at what SHOULD be a very simple problem, however I can't seem to find a solution. I have done the following:
ZipInputStream zin1 = new ZipInputStream(fin); ZipEntry ze1 = null; fin2 = new FileInputStream(fileName2); ZipInputStream zin2 = new ZipInputStream(fin2); ZipEntry ze2 = null; //fin.close(); ze1 = zin1.getNextEntry(); ze2 = zin2.getNextEntry();
Which gives me the first entry of each zipfile as a ZipEntry type object. I have tried getting the path of the file (inside the zip file) and using this to create a File type object. This does not seem to work though I get:
Exception in thread "main" java.io.FileNotFoundException: My DocumentsmetadatacoreProperties.xml (The system cannot find the file specified) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(Unknown Source) at java.io.FileReader.<init>(Unknown Source)
And this is because I get a null return from trying to create the File file1 = new File(correctLocation);
I guess I cannot access the file inside a zip file this way. So my question is how can I make a ZipEntry type object into a File type object?
The objective of the code is to add new records based on existing records with a partial change to the key. I'm getting "type of the expression must be an array type but it resolved to DstidArray" on dsTidRecTbl[i]
String stMajor = request.getParameter("stMajorVersion"); String stMinor = request.getParameter("stMinorVersion"); String stPatch = request.getParameter("stPatchVersion"); StringBuffer stKeySB = new StringBuffer(stMajor+stMinor+stPatch); String stKey = new String(stKeySB.toString()); DstidArray dsTidRecTbl = new DstidArray(stKey); request.setAttribute("dsTidRecTbl", dsTidRecTbl);
I don't really know what this means and it is sending an error when I try to run my program I am trying to set the x and y value (Int x and int y) to setVisible false at a specific time in my game but it keeps sending the error that int is not a reference type.
I am trying to understand Life time of a variable by writing a below program. But unable to compile it as it is throwing some error. Code snippet and error as follows,
// Understanding Lifetime of a variable. class LifeTime { public static void main(String args[]) { int x; for(x = 0; x <3 ; x++) { int y = -1; // y is initialized each time block is entered
[Code] .....
Please refer to the print screen attached 'LifeTime.jpeg' to this thread to know more about error.