Looks like the answer can be understood partly by looking at these
functions:
425 public static Uri parse(String uriString) {
426 return new StringUri(uriString);
427 }
439 public static Uri fromFile(File file) {
440 if (file == null) {
441 throw new NullPointerException("file");
442 }
443
444 PathPart path = PathPart.fromDecoded(file.getAbsolutePath());
445 return new HierarchicalUri(
446 "file", Part.EMPTY, path, Part.NULL, Part.NULL);
447 }
805 public static Uri fromParts(String scheme, String ssp,
806 String fragment) {
807 if (scheme == null) {
808 throw new NullPointerException("scheme");
809 }
810 if (ssp == null) {
811 throw new NullPointerException("ssp");
812 }
813
814 return new OpaqueUri(scheme, Part.fromDecoded(ssp),
815 Part.fromDecoded(fragment));
816 }
On Thursday, October 4, 2012 3:05:58 PM UTC-5, Lew wrote:
>
> bob wrote:
>
>> Can someone help me understand why the android.net.Uri class is abstract?
>>
>>
> You got the "what", now for the "why".
>
>
>> Naturally, I want to do something like this:
>>
>> I question the naturalness of that desire.
>
>
>> Uri uri = new Uri("http://www.example.com/file.mp4");
>>
>>
> It's more natural, some would say, to use a factory method. (Google "Java
> factory method"
> and you'll find, e.g.,
> http://en.wikipedia.org/wiki/Factory_method_pattern#Java, complete
> with reference to Josh Bloch's advice on the matter.)
>
> It's entirely unnatural to want to call a constructor on an abstract
> class. Such a class with
> no obvious implementors is a signal that it has a factory method. This is
> quite prevalent
> in the Java API.
>
> The "why" is to save the client from messy and irrelevant details of the
> implementation.
> You shouldn't have to decide which particular flavor of 'Uri' to
> instantiate, especially if the
> thing is tricky (e.g., has to support an ever-expanding list of
> protocols). Let the factory
> manufacture you one and you save all that headache.
>
> Study up on the reasons to prefer a factory method, and when not to.
>
> --
> Lew
>
>
>
>
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en